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를 출력합니다. 최종 출력
fun(2)
마찬가지로
출력 결과: 3[Output(fun(3))]3 최종 출력
fun(3)
마찬가지로
출력 결과: 4[Output(fun(4))]4 최종 출력
fun(4)
: 由于 4+1<5 判断失败, 不执行 fun(5)
Execution
, 출력 결과: 55최종 출력
为情所困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 콜백 func(4) $i++; echo $i;
5 콜백 func(4) $i++ 이후에는 이미 5보다 크므로 다음 echo $i(fun(4의 하단 echo $i) ))이 실행됩니다. fun(4) 전체 함수 실행이 종료됩니다.)
4 func(4)의 실행이 완료되었으므로 fun(3)이 계속 실행됩니다. 하단 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까지 에코되는 것과 동일합니다. , 그리고 처음으로 다시 울려 퍼지는 것은 그만한 가치가 있습니다. 관계를 계속 유지하세요.