>백엔드 개발 >PHP 튜토리얼 >PHP 버블 알고리즘(재귀적 구현)에 대한 자세한 설명_php 기술

PHP 버블 알고리즘(재귀적 구현)에 대한 자세한 설명_php 기술

WBOY
WBOY원래의
2016-05-16 20:32:24995검색

업적

코드 복사 코드는 다음과 같습니다.

/*
버블 알고리즘(재귀적 구현)
*/

maoPao 함수($array, $index=0)
{
$count = 개수($array);
If(($count-1) <= $index)
          $배열 반환;

for($i=$count-1; $i>$index; $i-- )
{
If($array[$i] < $array[$i-1])
            {
                $tmp = $array[$i];
$array[$i] = $array[$i-1];
               $array[$i-1] = $tmp;
}
}
$인덱스 ;
maoPao($array, $index)를 반환합니다.
//maoPao($array, $index )를 반환합니다.
}

$arr = 배열(12,4,3,1,9,5,6,8,7);
var_dump(maoPao($arr));

결과:

코드 복사 코드는 다음과 같습니다.

배열([0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 1 8 [7] => 9 [8] => 12 )

질문:

이 구현을 시도할 때 문제가 발생했는데 아직 해결되지 않았습니다.
여기:

코드 복사 코드는 다음과 같습니다.

$인덱스 ;
return maoPao($array, $index);
//maoPao($array, $index )를 반환합니다.

/******************
$index 대신 세 번째 줄을 직접 사용한 다음 ruturn을 사용하면 무한 루프에 들어갑니다. 함수 시작 부분에 $index를 출력했는데 둘 다 0이므로 $ 이후에 매개 변수가 재귀 함수에 전달되었음을 의미합니다. index가 $index가 아닙니다. 결과입니다(예: $index=$index 1).
maoPao($array, $index)는 $index; return maoPao($array, $index);를 작성하는 간단한 방법이 아닌가요? 두 결과가 다른 이유는 무엇입니까?
******************/

보충:

정답:

코드 복사 코드는 다음과 같습니다.

$index와 $index의 차이점은 $index의 최종 결과는 항상 1이지만 $index는 사후 증가라고 하고 $index는 사전 증가라고 한다는 것입니다. 그러나 변수를 전달할 때 차이점이 있습니다.

$인덱스 = 1;
$m = $인덱스 ;
echo $index.'
' //결과는 2입니다
echo $m.'
'; //결과는 1입니다. 사후 증가이므로 초기 $index=1이 $m에 먼저 할당되고 $index가 1씩 증가합니다. ;

$인덱스 = 1;
$n = $인덱스;
echo $index.'
' //결과는 2입니다
echo $n;                 //결과는 2입니다. 사전 증가이므로 $index 1의 연산이 먼저 수행된 후 $n에 할당됩니다.

기억하기 쉽지 않을 수 있으니 사용 시 주의가 필요합니다. 위 질문에서는 이 문제를 무시했는데, 이로 인해 $index가 0의 값을 무한히 전달하고 재귀가 잠기는 원인이 되었습니다.

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