>  기사  >  백엔드 개발  >  PHP에서 재귀를 구현하는 방법은 무엇입니까?

PHP에서 재귀를 구현하는 방법은 무엇입니까?

coldplay.xixi
coldplay.xixi원래의
2020-08-21 13:45:582299검색

PHP가 재귀를 구현하는 방법은 다음과 같습니다. 1. 참조를 매개변수로 사용합니다. 코드는 [$result[]=$a;test($a,$result)]입니다. 2. 전역 변수를 사용합니다. 코드는 [정적 $count=0;]입니다.

PHP에서 재귀를 구현하는 방법은 무엇입니까?

【관련 학습 추천: php 그래픽 튜토리얼

php 재귀 구현 방법:

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

참조를 매개 변수로 사용하는지 여부에 관계없이, 먼저 견적이 무엇인지 이해해야 합니다. 참조는 단순히 이름이 다른 두 변수가 동일한 저장 주소를 가리키는 것을 의미합니다. 원래 각 변수에는 고유한 저장 주소가 있었고 할당과 삭제는 고유한 방식으로 진행되었습니다. 좋습니다. 이제 두 변수는 저장 주소를 공유합니다. $a=&$b; 실제로 의미하는 바는 $a가 원래 저장 주소와 관계없이 $b와 같은 방을 공유해야 한다는 것입니다. 따라서 저장된 주소 값을 변경하면 두 값 모두에 영향을 미칩니다. ​

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

function test($a=0,&$result=array()){
$a++;
if ($a<10) {
 $result[]=$a;
 test($a,$result);
}
echo $a;
return $result;
 
}

위의 예는 매우 간단합니다. 조건이 true인 경우 a를 result[]에 할당하면 각 재귀에 의해 생성되는 a가 됩니다. 결과 배열에 추가됩니다. 따라서 이 예에서 생성된 $result 배열은 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5 ] = > 6 [6] => 7 [7] => 8 [8] => 9

이 예에서 더 흥미로운 점은 echo a의 값입니다. 많은 사람들이 12345678910이라고 생각하지만 실제로는 그렇지 않고 1098765432입니다. 왜? 함수가 echoa를 실행하기 전에 다음 함수 재귀를 수행했기 때문입니다. echo a의 실제 실행은 조건 a<10이 충족되지 않을 때 echo가 결과를 반환하는 것입니다. 상위 계층의 경우 재귀 함수를 실행한 후 이 계층의 echo $a를 실행하기 시작합니다.

예제 2,

PHP의 참조에서는 두 변수가 동일한 내용을 가리키는 것을 허용합니다. 예를 들어 $a = &$b; 이는 $a와 $b가 동일한 변수를 가리킨다는 의미입니다.

다음 예시에서는 $data가 참조로 전달되기 때문에 항상 데이터가 누적됩니다.

function recursion(&$data = [], $i = 0)
{
  if ($i < 10) {
    $data[] = $i;
    $i++;
    $this->recursion($data, $i);
  }
  return $data;
}
// 调用
$this->recursion();  // [0,1,2,3,4,5,6,7,8,9]

2. 전역 변수 사용

전역 변수를 사용하여 재귀 함수를 완성하세요. 전역 변수가 무엇인지 꼭 이해하세요. 함수 내에서 선언된 전역 변수는 동일한 이름을 가진 외부 변수에 대한 참조일 뿐입니다. 변수의 범위는 여전히 이 함수의 범위 내에 있습니다. 이러한 변수의 값을 변경하면 자연스럽게 같은 이름을 가진 외부 변수의 값도 변경됩니다. 그러나 일단 &를 사용하면 같은 이름의 변수는 더 이상 같은 이름의 참조가 아닙니다. 전역 변수를 사용하여 재귀 함수를 구현하는 데는 그렇게 깊은 수준을 이해할 필요가 없습니다. 전역 변수에 대한 원래의 관점을 유지하면 자연스럽게 재귀 함수를 이해할 수 있습니다.

function test($a=0,$result=array()){
 global $result;
 $a++;
 if ($a<10) {
  $result[]=$a;
  test($a,$result);
 }
 return $result;
}

global 함수 내에서 변수를 선언하는 것은 동일한 이름을 가진 외부 변수에 대한 참조일 뿐입니다. 변수의 범위는 여전히 이 함수의 범위 내에 있습니다. 이러한 변수의 값을 변경하면 자연스럽게 같은 이름을 가진 외부 변수의 값도 변경됩니다.

function recursion($data = [], $i = 0)
{
  global $data;
  if ($i < 10) {
    $data[] = $i;
    $i++;
    $this->recursion($data, $i);
  }
  return $data;
}
  
// 调用
$this->recursion();  // [0,1,2,3,4,5,6,7,8,9]

3. 정적 변수 사용

우리는 클래스에서 정적을 자주 보는데, 오늘날에는 재귀 함수에서 이를 사용합니다. 정적의 역할을 기억하세요. 함수가 처음 호출될 때만 변수를 초기화하고 변수 값을 유지하세요.

 예:

function test(){
static $count=0;
echo $count;
 
$count++;
}
test();
test();
test();
test();
test();

 이 코드 조각의 실행 결과는 무엇입니까? 00000인가요? 확실히 그렇지 않습니다. 01234입니다. 먼저 test()를 처음 호출할 때 static은 $count를 초기화합니다. 각 후속 실행 후에 $count의 값은 유지되고 더 이상 초기화되지 않습니다. 이는 static $count=0; 문장을 직접 무시하는 것과 같습니다.

 그래서 재귀함수에 static을 적용한 효과를 상상할 수 있습니다. 재귀 함수 간의 "브리지"로 사용해야 하는 변수는 static을 사용하여 초기화되며 "브리지 변수"의 값은 각 재귀마다 유지됩니다.

function test($a=0){
 static $result=array();
 $a++;
 if ($a<10) {
  $result[]=$a;
  test($a);
 }
 return $result;
}

정적 변수는 첫 번째 호출에서만 초기화됩니다. 로컬 함수 범위에만 존재하지만 프로그램 실행이 이 범위를 벗어나도 해당 값은 손실되지 않습니다.

function recursion($i = 0)
{
  static $data = [];
  if ($i < 10) {
    $data[] = $i;
    $i++;
    $this->recursion($i);
  }
  return $data;
}
  
// 调用
$this->recursion();  // [0,1,2,3,4,5,6,7,8,9]

관련 학습 권장 사항: php 프로그래밍(동영상)

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.