PHPz2017-05-24 11:36:32
コールバックプロセスを考慮せずに関数の実装関数を考慮して再帰を理解します 再帰を理解するためにコールバックプロセスを考慮する場合は、
再帰プロセス全体のパラメータと変数を分析し、それらがいつ呼び出されるかを覚えておく必要があります。関数を呼び出してメインの呼び出し関数に戻るのは少し面倒に思えます。よく使用されるいくつかの再帰関数の関数については、
:递归求解阶乘
のように詳しく説明されています。
リーリー
このように理解すれば、再帰処理中に関数呼び出しの問題を考慮する必要はありません。
计算 n 的阶乘
, 函数功能实现就是: n 的阶乘 = n * (n-1)的阶乘
問題の関数の場合:
(短い文で説明するのは難しいです):
つまり、関数の説明に従って、関数の実行プロセスを取得し、最終的に結果を取得することができます。输入 n,输出 n+1, 如果 n+1<5,执行 fun(n+1),再输出 n+1
fun(1)
: 输入 1, 输出 2, 2+1<5,执行 fun(2)
,得到 fun(2)
最終出力
: 2[output(fun(2))]2
fun(2)
最終出力
: 23[Output(fun(3))]32
fun(3)
最終出力
: 234[Output(fun(4))] 432
fun(4)
: 由于 4+1<5 判断失败, 不执行 fun(5)
最終出力
: 23455432
为情所困2017-05-24 11:36:32
関数は非同期ではないので、 fun(1)
2 $i++; echo $i;
3 callback func(2) $i++; echo $i;
4 callback func(3) $i++; ;
5 Callback func(4) $i++; echo $i;
5 Callback func(4) $i++ の後はすでに 5 より大きいため、次の echo $i (下の echo $i of fun(4) )) が実行され、関数全体の実行が終了します)
4 func(4) が実行されるので、一番下の echo $i
3 2 も同じロジックです
。
世界只因有你2017-05-24 11:36:32
fun 関数が再帰的である場合、$i < 5 が満たされると判断された場合、関数自体を呼び出してスタックにプッシュします。同時に、関数の最後の文である echo $i は実行されません。 ; 再帰呼び出しが $i = 5 に達すると、関数の前のスタック ポイントに戻り、実行を続行します。つまり、関数 echo $i;
の最後の文を実行して 4 を出力し、最後にスタックにプッシュされた場所に戻り、fun 関数が完全に戻るまで 3 を出力し続けます。 if ($i < 5) { return fun($i);}
に変更すると、23455
天蓬老师2017-05-24 11:36:32
このように考えることができます。この関数が行うことは、前半が i をエコーし、後半が i をエコーし、i=5 になるまで途中で自分自身への呼び出しが挿入されるということです。これは、i を 5 までエコーするのと同等です。 、そして最初に戻ります。それだけの価値があります。ただ関係を続けてください。