人生最曼妙的风景,竟是内心的淡定与从容!
コールバックプロセスを考慮せずに関数の実装関数を考慮して再帰を理解します 再帰を理解するためにコールバックプロセスを考慮する場合は、再帰プロセス全体のパラメータと変数を分析し、それらがいつ呼び出されるかを覚えておく必要があります。関数を呼び出してメインの呼び出し関数に戻るのは少し面倒に思えます。よく使用されるいくつかの再帰関数の関数については、:递归求解阶乘 のように詳しく説明されています。 リーリー
递归求解阶乘
このように理解すれば、再帰処理中に関数呼び出しの問題を考慮する必要はありません。 计算 n 的阶乘, 函数功能实现就是: n 的阶乘 = n * (n-1)的阶乘問題の関数の場合:
计算 n 的阶乘
n 的阶乘 = n * (n-1)的阶乘
(短い文で説明するのは難しいです):つまり、関数の説明に従って、関数の実行プロセスを取得し、最終的に結果を取得することができます。输入 n,输出 n+1, 如果 n+1<5,执行 fun(n+1),再输出 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(1)
fun(2)
fun(2)最終出力: 23[Output(fun(3))]32
fun(3)最終出力: 234[Output(fun(4))] 432
fun(3)
fun(4): 由于 4+1<5 判断失败, 不执行 fun(5)最終出力: 23455432
fun(4)
fun(5)
再帰的に返す場合、この文は逆方向に出力されます
関数は非同期ではないので、 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 $i3 2 も同じロジックです。
fun 関数が再帰的である場合、$i の最後の文を実行して 4 を出力し、最後にスタックにプッシュされた場所に戻り、fun 関数が完全に戻るまで 3 を出力し続けます。 if ($i < 5) { return fun($i);}に変更すると、23455
if ($i < 5) { return fun($i);}
この記事を参照すると、再帰を理解すれば明確になります。 http://www.jianshu.com/p/8bee...
このように考えることができます。この関数が行うことは、前半が i をエコーし、後半が i をエコーし、i=5 になるまで途中で自分自身への呼び出しが挿入されるということです。これは、i を 5 までエコーするのと同等です。 、そして最初に戻ります。それだけの価値があります。ただ関係を続けてください。
皆さんありがとうございます、分かりました
コールバックプロセスを考慮せずに関数の実装関数を考慮して再帰を理解します 再帰を理解するためにコールバックプロセスを考慮する場合は、
関数の機能は次のとおりです:再帰プロセス全体のパラメータと変数を分析し、それらがいつ呼び出されるかを覚えておく必要があります。関数を呼び出してメインの呼び出し関数に戻るのは少し面倒に思えます。よく使用されるいくつかの再帰関数の関数については、
:
递归求解阶乘
のように詳しく説明されています。 リーリーこのように理解すれば、再帰処理中に関数呼び出しの問題を考慮する必要はありません。
関数の機能は次のとおりです:计算 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
再帰的に返す場合、この文は逆方向に出力されます
![](http://img.php.cn/upload/image/000/000/000/e4103c2cb3462d85e5ceb6499c9d0087-0.png)
関数は非同期ではないので、 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 も同じロジックです
。
fun 関数が再帰的である場合、$i の最後の文を実行して 4 を出力し、最後にスタックにプッシュされた場所に戻り、fun 関数が完全に戻るまで 3 を出力し続けます。
が出力されますif ($i < 5) { return fun($i);}
に変更すると、23455この記事を参照すると、再帰を理解すれば明確になります。 http://www.jianshu.com/p/8bee...
このように考えることができます。この関数が行うことは、前半が i をエコーし、後半が i をエコーし、i=5 になるまで途中で自分自身への呼び出しが挿入されるということです。これは、i を 5 までエコーするのと同等です。 、そして最初に戻ります。それだけの価値があります。ただ関係を続けてください。
![](http://img.php.cn/upload/image/000/000/000/9eda7fa7dce07c04548a8fc744e3968f-0.png)
皆さんありがとうございます、分かりました