PHP 에서 재 귀적 인 실현 사례 상세 설명

재 귀적 정의
    재 귀(http:/en.wikipedia.org/wiki/Recursive)는 함수 가 자신(직접 또는 간접)을 호출 하 는 메커니즘 으로 이런 강력 한 사상 은 복잡 한 개념 을 매우 간단하게 만 들 수 있다.컴퓨터 과학 외 에 특히 수학 에 서 는 재 귀 개념 이 자주 볼 수 있다.예 를 들 어 재 귀 설명 에 가장 많이 사용 되 는 피 보 나치 수열 은 바로 매우 전형 적 인 예 이 고 다른 예 를 들 어 계층(n!)이다.재 귀적 정의 로 바 뀔 수도 있다(n!=n*(n-1)!).현실 생활 에서 도 재 귀적 인 사상 은 곳곳에서 볼 수 있다.예 를 들 어 학업 문제 로 인해 교장 선생님 이 도장 을 찍 어야 한다.그러나 교장 선생님 은'교감 선생님 이 도장 을 찍 어야 내 가 도장 을 찍 을 수 있다'고 말 했다.교감 선생님 을 찾 으 면 교감 선생님 은'학과 장님 이 도장 을 찍 어야 내 가 도장 을 찍 을 수 있다'고 말 했다.마지막 에 담임 선생님 을 찾 을 때 까지.담임 선생님 의 호탕 한 도장 을 받 은 후에 너 는 학과 장,교감 선생님,마지막 으로 교장 선생님 의 도장 을 받 아야 한다.과정 은 다음 과 같다.

재 귀 함 수 는 자신 을 호출 하 는 함수 이다.재 귀 함 수 를 쓸 때 는 무한 재 귀 할 수 있 으 므 로 조심해 야 한다.재 귀 를 중지 할 충분 한 방법 을 확보 해 야 한다.
1:매개 변수 참조 로 재 귀 함 수 를 완성 합 니 다.같은 메모리 주 소 를 작 동 합 니 다.

<?php
$i=1; 
function test(&$i) 
{
echo $i; 
$i++; 
 if ($i < 10) 
{ 
test($i);
} 
} 
test($i);//   123456789
test ( $i );//   10
?>
2.전역 변 수 를 사용 하여 재 귀 함 수 를 완성 합 니 다.
함수 도 메 인 내부 에서 global 구문 으로 가 져 온 진정한 전역 변 수 는 실제 적 으로 전역 변 수 를 참조 하 는 것 입 니 다.예 를 들 어 test()함수 내부 의$i 는 실제 프로그램의 첫 줄 에 불과 합 니 다($i=1;).의 변수$i 의 응용;

<?php 
$i = 1 ;
function test ()
{ 
global $i ;
 echo $i ;
$i++; 
 if ($i <10 ) 
{ 
test();
} 
} 
test();//   123456789
test ();//   10
?>
3.정적 변 수 를 사용 하여 재 귀 함 수 를 완성 합 니 다.
static 의 역할:함수 가 처음 호출 될 때 만 변 수 를 초기 화하 고 변수 값 을 유지 합 니 다.

<?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('.', '..')) )
{
$dirr = $dir.'/'.$file;
if(is_dir($dirr))
{
getFiles($dirr);
}else{
array_push($arr, $dirr);
}
}
}
}
}
$arr = array();
getFiles('E:/logs');
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('.','..')) )
{
$dirr = $dir."/".$file;
if(is_dir($dirr))
{
getFiles ($dirr);
}else{
array_push($arr,$dirr);
}
}
}
}
return $arr;
}
$rows= array();
$rows = getFiles ('E:/logs');
print_r($rows);
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 PHP 에서 재 귀적 인 실현 사례 에 대한 상세 한 설명 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.만약 에 궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기