C言語の再帰のコードです。

再帰は慣れるまで難しいです。
いきなり 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); です。ここで i9 ですので、 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); です。ここで i8 ですので、 8 がprintされます。

つまり、recurse(8);9 を出力し、そして8 を出力し、終了します。

上記の流れが理解できれば、再帰の理解に一歩近づくかもしれません。

コメントを投稿

0 コメント