1

これが非常に基本的な質問である場合は申し訳ありませんが、私は再帰を学習しようとしています。

以下のコードは、リンクリストを逆にすることができます。

(n.next=prev)3行目までのロジックは理解していますが、この行を実行する前に関数が再度呼び出されるため、4行目がいつ呼び出されるか混乱しています。

誰かがこの再帰の流れを教えてもらえますか?

 void reverse(node n, node prev) {
     if (n == null) { newroot = prev; return; }
     reverse(n.next, n);
     n.next = prev;
    }
4

1 に答える 1

2

nがヒットnull して逆関数になるとすぐにreturn、そこから呼び出し元の関数までバックトラックし、最初の呼び出し元の関数まで戻ります。

更新:より完全な説明については、以下のコメントを参照してください。

于 2013-03-15T15:36:27.090 に答える