#!/usr/bin/perl
use 5.016;
use warnings;

# Farey sequence
# see: http://w...content-available-to-author-only...s.jp/ikuro_kotaro/koramu/1529_f2.htm
# see: http://m...content-available-to-author-only...m.com/FareySequence.html
# thanks: http://t...content-available-to-author-only...h.net/test/read.cgi/tech/1390525149/194

sub f {
	my ($n) = @_;

	return sub {
		my ($p, $q, $r, $s) = @_;

		my $pd = $p + $r;
		my $qd = $q + $s;
		($qd <= $n) or return ();

		return (
			__SUB__->($p, $q, $pd, $qd),
			"$pd/$qd",
			__SUB__->($pd, $qd, $r, $s)
		);
	}->(0, 1, 1, 1);
}

say join(' ', f(3));
say join(' ', f(5));
