PHP에서 재귀를 구현하는 세 가지 방법의 예

伊谢尔伦
풀어 주다: 2023-03-07 18:50:01
원래의
4136명이 탐색했습니다.

재귀 함수는 누구나 함수 본문 내에서 직접 또는 간접적으로 사용하는 경우가 많습니다. 자신을 호출하기 전에 조건을 결정해야 합니다. 그렇지 않으면 호출이 무한정 계속됩니다. 이전 장에서는 php 재귀 함수가 무엇인지 설명하고 를 설명하기 위한 간단한 예제를 소개했습니다. 이 섹션에서는 PHP에서 재귀 함수를 구현하는 여러 가지 방법을 소개합니다. 여기에는 세 가지 기본 방법이 나열되어 있습니다. 이를 이해하려면 전역 변수, 참조 및 정적 변수에 대한 이해와 해당 범위에 대한 이해를 포함하여 일정 수준의 기본 지식이 필요합니다. 재귀 함수는 무한 수준의 분류를 해결하는 데에도 좋은 기술입니다.

1. 참조를 매개변수로 사용

참조는 이름이 다른 두 변수가 동일한 저장소 주소를 가리킨다는 의미입니다. 원래 각 변수에는 고유한 저장 주소가 있었고 할당과 삭제는 고유한 방식으로 진행되었습니다. 이제 두 변수가 저장소 주소를 공유해야 합니다. $a=&$b; . 실제로 의미하는 바는 $a가 원래 저장 주소와 상관없이 $b와 방을 공유해야 한다는 것입니다. 따라서 저장된 주소 값을 변경하면 두 값 모두에 영향을 미칩니다. ​

함수는 같은 이름을 가진 함수라도 원래 자신의 일을 합니다. 재귀 함수는 참조를 매개 변수로 사용하고 두 함수 간의 데이터 공유를 형성하는 브리지가 되는 것을 고려합니다. 두 함수는 서로 다른 주소에서 작동하는 것처럼 보이지만 실제로는 동일한 메모리 주소에서 작동합니다.

예를 통해 살펴보겠습니다.

<?php
function test($a=0,&$result=array()){
 $a++;
 if ($a<10) {
   $result[]=$a;
   test($a,$result);
 }
 echo $a;
 return $result;
}
test();
?>
로그인 후 복사

위의 예는 조건이 참인 경우 a<10을 사용하면 매우 간단합니다. , a를 결과에 할당합니다. []; 결과의 참조를 함수에 전달하면 각 재귀에 의해 생성된 a가 결과 배열 결과에 추가됩니다. 따라서 이 예에서 생성된 $result 배열은 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] =>; 5 [ 5] => 6 [6] => 7 [7] => 8 [8] =>

이 예에서 더 흥미로운 점은 echo $a의 값입니다. 많은 분들이 12345678910이라고 생각하시는 것 같은데,

1098765432가 아닙니다. 왜? 함수가 echo $a 이전에 다음 함수 재귀를 실행하지 않았기 때문입니다. echo $a의 실제 실행은 조건 a<10이 충족되지 않을 때 echo $a가 결과를 반환하는 것입니다. 상위 계층의 경우 재귀 함수를 실행한 후 이 계층의 echo $a가 실행되기 시작합니다. .

2. 전역 변수 사용

전역 변수를 사용하여 재귀 함수를 완성하려면 먼저 전역 변수가 무엇인지 이해하세요. 함수 내에서 선언된 전역 변수는 동일한 이름을 가진 외부 변수에 대한 참조일 뿐입니다. 변수의 범위는 여전히 이 함수의 범위 내에 있습니다. 이러한 변수의 값을 변경하면 자연스럽게 같은 이름을 가진 외부 변수의 값도 변경됩니다. 그러나

&을 사용하면 같은 이름의 변수는 더 이상 같은 이름의 참조가 되지 않습니다.

다음은 예시입니다.

<?php
function test($a=0,$result=array()){
 global $result;
 $a++;
 if ($a<10) {
   $result[]=$a;
   test($a,$result);
 }
 return $result;
}
?>
로그인 후 복사

3. 정적 변수를 사용합니다.

여기서 클래스에서는

static을 사용하고, 오늘은 재귀 함수에서 이를 사용하겠습니다. 정적의 역할을 기억하세요. 함수가 처음 호출될 때만 변수를 초기화하고 변수 값을 유지하세요.

다음은 설명하기 위한 예입니다.

<?php
function test(){
 static $count=0;
 echo $count;
 $count++;
}
test();
test();
test();
test();
test();
?>
로그인 후 복사
설명: 이 코드 조각의 실행 결과는 무엇입니까?

00000이라고 생각하실 수도 있겠지만, 대답은 당연히 아니오입니다. 출력 결과는 01234입니다. 먼저 test()를 처음 호출하면 static은 $count를 초기화합니다. 각 실행 후에 $count의 값은 유지되고 더 이상 초기화되지 않습니다. 이는 static $count=0; 문장을 직접 무시하는 것과 같습니다. 그래서 재귀 함수에 정적을 적용하는 효과를 상상할 수 있습니다. 재귀 함수 간의 "브리지"로 사용해야 하는 변수는 static을 사용하여 초기화되며 "브리지 변수"의 값은 각 재귀마다 유지됩니다.

요약

소위 재귀 함수는 함수 호출 자체를 처리하는 방법과 필요한 결과가 합리적으로 "전송될 수 있는지 확인하는 방법"에 중점을 둡니다. " 기능 사이. 위는 PHP에서 재귀를 구현하는 세 가지 기본 방법입니다. 친구들은 이러한 방법을 더 능숙하게 익히고 향후 학습 및 개발을 위한 좋은 기반을 마련하기 위해 다양한 코드를 직접 시도해 볼 수 있습니다.

【관련 튜토리얼 추천】

1. "

php.cn Dugu Jiujian (4) - PHP 비디오 튜토리얼 "

2. PHP 프로그래밍 입문부터 마스터링까지 전체 동영상 튜토리얼


3.

PHP 실용 동영상 튜토리얼

위 내용은 PHP에서 재귀를 구현하는 세 가지 방법의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!