Comprenez la récursivité en considérant la fonction d'implémentation de la fonction sans considérer le processus de rappel Si vous considérez le processus de rappel pour comprendre la récursivité, vous devez analyser les paramètres et les variables dans l'ensemble du processus récursif et vous rappeler quand ils sont appelés. Il est un peu gênant d'appeler une fonction et de revenir à la fonction appelante principale. Les fonctions de certaines fonctions récursives couramment utilisées sont bien décrites, telles que Résolution factorielle récursive :递归求解阶乘:
执行fun(4): 由于 4+1<5 判断失败, 不执行 fun(5)
rrreee
La fonction est : Calculer la factorielle de n L'implémentation de la fonction est : La factorielle de n = la factorielle de n * (n-1). De cette façon, il n'est pas nécessaire de considérer le processus récursif Problème d'appel de fonction dans .Pour la fonction en question :
La fonction est : Entrée n, sortie n+1, si n+1<5, exécute fun(n+1), puis sortie n+1(pas bon Décrivez dans une courte phrase) :
Ainsi, selon la description de la fonction, vous pouvez obtenir le processus d'exécution de la fonction et enfin obtenir le résultat.
🎜Exécutez fun(1) : entrée 1, sortie 2, 2+1<5, exécutez fun(2) et obtenez fun(2 ) Affichez le résultat, puis affichez 2. 🎜🎜Sortie finale🎜 : 2[output(fun(2))]2🎜🎜
La fonction n'est pas asynchrone vous exécutez donc 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) Parce qu'après $i++, il est déjà supérieur à 5, donc le echo $i suivant (l'écho du bas $i de fun(4) )) est exécuté. fun(4) toute l'exécution de la fonction se termine) 4 Puisque l'exécution de func(4) est terminée, fun(3) continuera à être exécuté. L'écho du bas $i 3 2 a également le même. logique
Lorsque la fonction fun est récursive, lorsqu'il est jugé que $i pour qu'elle génère 4, puis retourne à l'endroit où elle a été poussée sur la pile la dernière fois, et continue d'afficher 3... jusqu'à ce que la fonction fun revienne complètement. Passer à if ($i < 5) { return fun($i);} affichera 23455
Vous pouvez y penser de cette façon, ce que fait cette fonction, c'est que la première moitié fait écho à i, la seconde moitié fait écho à i, et un appel à lui-même est inséré au milieu jusqu'à ce que i=5, ce qui équivaut à faire écho à i jusqu'à 5. , puis revenir au début. Cela en vaut la peine. Ayez simplement une bonne relation avec l'intérieur et l'extérieur.
Comprenez la récursivité en considérant la fonction d'implémentation de la fonction sans considérer le processus de rappel
Si vous considérez le processus de rappel pour comprendre la récursivité, vous devez analyser les paramètres et les variables dans l'ensemble du processus récursif et vous rappeler quand ils sont appelés. Il est un peu gênant d'appeler une fonction et de revenir à la fonction appelante principale.
Les fonctions de certaines fonctions récursives couramment utilisées sont bien décrites, telles que
Résolution factorielle récursive
:递归求解阶乘
:函数功能就是:
计算 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.最终输出: 2[输出(fun(2))]2
同样,
fun(2)
输出结果: 3[输出(fun(3))]3最终输出:23[输出(fun(3))]32
同样,
fun(3)
输出结果: 4[输出(fun(4))]4最终输出:234[输出(fun(4))]432
执行
La fonction est :fun(4)
: 由于 4+1<5 判断失败, 不执行fun(5)
rrreeeLa fonction est :
Calculer la factorielle de n
L'implémentation de la fonction est :La factorielle de n = la factorielle de n * (n-1)
. De cette façon, il n'est pas nécessaire de considérer le processus récursif Problème d'appel de fonction dans . Pour la fonction en question :Entrée n, sortie n+1, si n+1<5, exécute fun(n+1), puis sortie n+1
(pas bon Décrivez dans une courte phrase) :fun(1)
: entrée 1, sortie 2, 2+1<5, exécutezfun(2)
et obtenezfun(2 )
Affichez le résultat, puis affichez 2. 🎜🎜Sortie finale🎜 : 2[output(fun(2))]2🎜🎜fun(2)
: 3[output(fun(3))]3 🎜🎜sortie finale🎜 :23[output(fun(3))]32🎜🎜fun(3)
: 4[output(fun(4))]4 🎜🎜sortie finale🎜 :234[output(fun(4))]432🎜🎜fun(4)
: puisque le jugement de 4+1<5 échoue,fun(5)
n'est pas exécuté et le résultat de sortie est : 55 🎜🎜Sortie finale🎜 : 23455432🎜🎜 🎜Lors d'un retour récursif, cette phrase sera affichée à l'envers

La fonction n'est pas asynchrone
vous exécutez donc 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) Parce qu'après $i++, il est déjà supérieur à 5, donc le echo $i suivant (l'écho du bas $i de fun(4) )) est exécuté. fun(4) toute l'exécution de la fonction se termine)
4 Puisque l'exécution de func(4) est terminée, fun(3) continuera à être exécuté. L'écho du bas $i
3 2 a également le même. logique
Lorsque la fonction fun est récursive, lorsqu'il est jugé que $i pour qu'elle génère 4, puis retourne à l'endroit où elle a été poussée sur la pile la dernière fois, et continue d'afficher 3... jusqu'à ce que la fonction fun revienne complètement. Passer à
if ($i < 5) { return fun($i);}
affichera 23455Vous pouvez vous référer à cet article, et il sera clair si vous comprenez la récursivité. http://www.jianshu.com/p/8bee...
Vous pouvez y penser de cette façon, ce que fait cette fonction, c'est que la première moitié fait écho à i, la seconde moitié fait écho à i, et un appel à lui-même est inséré au milieu jusqu'à ce que i=5, ce qui équivaut à faire écho à i jusqu'à 5. , puis revenir au début. Cela en vaut la peine. Ayez simplement une bonne relation avec l'intérieur et l'extérieur.

Merci à tous, je comprends