鍋あり谷あり

テーマを決めずに適当に書いています。

いきなりですが、既約分数クイズ*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:少なくとも、私に理解できるような意味は、ない