いきなりですが、既約分数クイズ*1の、なんとかツリーを使わない解です。
#include <stdio.h> void irre( int n, int d, int m ) { printf( "%d/%d, ", n, d ); if ( n*2 < d ) irre( d-n, d, m ); if ( n+d <= m && 0<n ) irre( n, n+d, m ); } int main( int argc, const char * argv[] ) { int m = argc<2 ? 10 : atoi( argv[1] ); irre( 0, 1, m ); return 0; }
出力順序に意味がない*2ことと、使用メモリの大半がスタックなので、スタックオーバーフローしやすいのが難点です。
題意を満たすことを理解するための数学的素養の量と、コードの量が少ないのがメリットだと思いますが、いかがでしょう。
*1:http://www.hyuki.com/diary/dia0312.html#i30
*2:少なくとも、私に理解できるような意味は、ない