이전 기사에서 php 재귀 함수의 반환 값 문제를 소개했으므로 오늘은 PHP 재귀 함수의 논리적 문제를 소개하겠습니다. 이 문제는 많은 친구들에게 발생합니다. 분석해보세요!
먼저 재귀함수가 무엇인지 알아야 합니다. 일반인의 용어로 말하면 자신만의 함수를 호출하는 것입니다.
이제 1부터 10까지의 중첩 문제를 해결하기 위한 코드를 설계해야 합니다.
코드 A:
<?php //递归函数 $num=10; function add($sum){ static $tot; if($sum>=1){ $tot+=$sum; add(--$sum); }else{ return $tot; } } echo add($num); ?>
코드 B:
<?php //递归函数 $num=10; function add($sum){ static $tot; if($sum>=1){ $tot+=$sum; return add(--$sum); }else{ return $tot; } } echo add($num); ?>
원하는 결과를 A에서는 인쇄할 수 없지만 B에서는 얻을 수 있습니다. A 코드와 B 코드의 유일한 차이점은 if에 반환을 추가한다는 것입니다.
전체 재귀 프로세스 분석을 시작해 보겠습니다. 이해를 돕기 위해 Inception을 시청해 보세요. (구현할 수 없는 A 코드를 예로 들어 보겠습니다.)
1. 함수에 10을 가져오고 if 문 뒤에는 판단하면 $tot가 겹치기 시작합니다.
2. 핵심은 다음과 같습니다. 매개변수를 1씩 줄이고 함수에 다시 도입합니다. (반환 값 없음!!!)
3. 그런 다음 위 프로세스는 $sum=1이 될 때까지 외부에서 내부로, 10에서 1까지 계속 반복합니다. 이 10단계 루프에는 반환 값이 없습니다.
4. $sum=0인 경우 반환 값이 필요합니다.
인셉션에서는 주인공이 꿈의 11층에서 깨어났는데, 그 이전 10층의 꿈은 모두 수면 단계인 것 같아요. 이 주인공이 깨어날 수 있다고 생각하시나요? 당연히 불가능합니다. 그는 꿈나라의 11층에만 갇혀서 결코 깨어나지 못할 것입니다.
주인공이 깨어날 수 있는 유일한 방법은 모든 수준의 꿈에서 깨어나 현실로 돌아가는 것입니다. A 코드와 비교하여 B 코드는 첫 번째 수준부터 11 번째 수준까지 반환 값이 필요합니다. 그래서 11번째 레이어가 깨어난 후 10번째 레이어가 활성화되고, 그 후 레이어별로 활성화되고, 마침내 원활하게 깨어나 최종 결과가 올바르게 출력되었습니다.
요약:
PHP 재귀 함수의 위 논리적 문제를 통해 많은 친구들이 겪었던 것과 같은 느낌을 받을 수 있습니다. 위의 두 코드가 문제 해결에 도움이 되기를 바랍니다.
관련 권장 사항:
PHP 재귀 함수를 효과적으로 사용하는 방법은 무엇인가요? PHP 재귀 함수의 일반적인 예
위 내용은 PHP 재귀 함수의 논리적 문제에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!