再帰は慣れるまで難しいです。
いきなり recurse(0); を考えるのが難しいようでしたら、recurse(10); や recurse(9); あたりから、動作がどうなるかを考えてみるのもよいかと思います。
C
1if (i < 10) {2 recurse(i + 1);3 printf("%d ", i);4}
最初、 i には 10 が入っており。if文の中身は実行されません。
つまり、recurse(10); は結果として何も出力せずに終了します。
C
1if (i < 10) {2 recurse(i + 1);3 printf("%d ", i);4}
最初、i には 9 が入っており。if文の中身が実行されます。
ここで recurse(i + 1); が呼ばれ、iは9ですので、recurse(10); が実行されます。recurse(10); は前述の通り、結果として何も出力せずに終了します。recurse(i + 1); の呼び出しがおわりましたので、 recurse(9); の続きが実行されます。
次の行は printf("%d ", i); です。ここで i は 9 ですので、 9 がprintされます。
つまり、recurse(9); は 9 を出力し、終了します。
C
1if (i < 10) {2 recurse(i + 1);3 printf("%d ", i);4}
最初、i には 8 が入っており。if文の中身が実行されます。
ここで recurse(i + 1); が呼ばれ、iは8ですので、recurse(9); が実行されます。recurse(9); は前述の通り、9 を出力し、終了します。recurse(i + 1); の呼び出しがおわりましたので、 recurse(8); の続きが実行されます。
次の行は printf("%d ", i); です。ここで i は 8 ですので、 8 がprintされます。
つまり、recurse(8); は 9 を出力し、そして8 を出力し、終了します。
上記の流れが理解できれば、再帰の理解に一歩近づくかもしれません。

0 コメント