>  기사  >  백엔드 개발  >  PHP의 재귀에 대한 자세한 설명

PHP의 재귀에 대한 자세한 설명

墨辰丷
墨辰丷원래의
2018-05-17 11:41:443169검색

Recursive(http://en.wikipedia.org/wiki/Recursive)는 함수가 자신을 직접 또는 간접적으로 호출하는 메커니즘입니다. 이 강력한 아이디어는 일부 복잡한 개념을 매우 단순하게 만들 수 있습니다. 이 글에서는 주로 PHP에서 재귀의 상세한 구현 예를 소개합니다. 필요한 친구는 재귀의 정의를 참조할 수 있습니다

Recursive(http:/en.wikipedia.org/wiki/Recursive)는 함수를 호출하는 메커니즘입니다. (직간접적으로) 이 강력한 아이디어는 일부 복잡한 개념을 매우 단순한 개념으로 바꿀 수 있습니다. 컴퓨터 과학 이외의 분야, 특히 수학 분야에서는 재귀라는 개념이 일반적입니다. 예를 들어, 재귀를 설명하는데 가장 일반적으로 사용되는 피보나치 수열이 매우 전형적인 예이며, 레벨(n!)과 같은 다른 것들도 재귀적 정의(n! = n*(n-1)!)로 변환될 수 있습니다. ) .재귀 함수는 자신을 호출하는 함수입니다. 재귀 함수를 작성할 때는 무기한 재귀될 수 있으므로 주의하세요. 재귀를 종료할 적절한 수단이 있는지 확인해야 합니다.

One: 매개변수 참조를 사용하여 재귀 함수를 완성하세요. 작업은 동일한 메모리 주소입니다.

<?php
$i=1; 
function test(&$i) 
{
echo $i; 
$i++; 
 if ($i < 10) 
{ 
test($i);
} 
} 
test($i);// 输出123456789
test ( $i );// 输出10
?>

둘째: 전역 변수를 사용하여 재귀 함수를 완성합니다.

함수 도메인 내부의 전역 문으로 가져온 실제 전역 변수는 실제로 전역 변수에 대한 참조를 설정합니다. 예제에서 test() 함수 내의 $i는 실제로 프로그램의 첫 번째 줄에 있는 변수 $i를 적용한 것입니다($i = 1;).

<?php 
$i = 1 ;
function test ()
{ 
global $i ;
 echo $i ;
$i++; 
 if ($i <10 ) 
{ 
test();
} 
} 
test();// 输出123456789
test ();// 输出10
?>

Three: 정적 사용 재귀 함수를 완성하기 위한 변수.

정적의 역할: 함수가 처음 호출될 때만 변수를 초기화하고 변수 값을 유지합니다.

<?php 
function test () 
{ 
  static $i = 1 ; 
  echo $i ;
$i ++; 
  if ( $i < 10 ) { 
     test ();
  } 
  $i --;// 在每一层递归结束时自减,这一句可以帮助理解递归函数的执行过程 
}
test();// 输出123456789
test();// 输出123456789 
?>

예제 1. 전역 변수 사용 시 폴더 내 모든 파일을 재귀적으로 순회

function getFiles($dir)
{
global $arr;
if(is_dir($dir)){
$hadle = @opendir($dir);
while($file=readdir($hadle) )
{
if(!in_array($file,array(&#39;.&#39;, &#39;..&#39;)) )
{
$dirr = $dir.&#39;/&#39;.$file;
if(is_dir($dirr))
{
getFiles($dirr);
}else{
array_push($arr, $dirr);
}
}
}
}
}
$arr = array();
getFiles(&#39;E:/logs&#39;);
print_r($arr);

예제 2: 정적 변수 사용 시 폴더 내 모든 파일 재귀적으로 순회

function getFiles ($dir)
{
static $arr = array();
if(is_dir($dir)){
$hadle = opendir($dir);
while($file=readdir($hadle))
{
if(!in_array($file,array(&#39;.&#39;,&#39;..&#39;)) )
{
$dirr = $dir."/".$file;
if(is_dir($dirr))
{
getFiles ($dirr);
}else{
array_push($arr,$dirr);
}
}
}
}
return $arr;
}
$rows= array();
$rows = getFiles (&#39;E:/logs&#39;);
print_r($rows);

관련 권장 사항:

PHP 재귀 알고리즘에 대한 자세한 설명

thinkPHP는 재귀 루프 열을 구현하고 트리 구조에 따라 무한히 출력합니다.

PHP는 비재귀 기반 선주문/순차 구현 알고리즘/이진 트리 연산의 후순 탐색

위 내용은 PHP의 재귀에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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