2009-11-28 3 views
1

나는 이것이 숙제가 아니라고 약속한다. 나는 단지 호기심 많은 초심자이다.PHP : 누군가이 코드의 작동 방식을 설명 할 수 있습니까? (피보나치)

어떻게이 :

function f($i){return $i<2?$i:f($i-1)+f($i-2);} 

function fibonacci($n, $arr = array(0,1)){ 
    $arr[] = $arr[(count($arr) - 1)] + $arr[(count($arr) - 2)]; 
    if (count($arr) == $n) return $arr[$n - 1]; 
    else return fibonacci($n, $arr); 
} 

(광산)

내가 생각 나는 단지 돈과 같은 결과를 생성 (스마트 누군가에 의해 작성) 구문을 알지 못합니다. 거기에 if 문이 있습니까?

답변

5

연산자 "?" 명명 된 삼항 연산자입니다. 다음과 같이 사용됩니다. p1? p2 : p3 p1이 참이면 p2, 그렇지 않으면 p3이됩니다. 이 false 인 경우

x ? a : b 

x이 참 a에 경우 평가, 또는 b :

+1

와우. 유용합니다. – Greg

2

물음표는 조건식입니다.

3

첫 번째 기능은 속기입니다. 여기에있는 일이 있습니다

if($i < 2) { // $i < 2 ? 
    return $i; 
} 
else { // : 
    return f($i-1)+f($i-2); 
} 

두 개 미만인 경우 함수를 호출 할 필요가 없습니다. 2 이상이면 함수가 재귀 적으로 호출됩니다.

2
function f($i){return $i<2?$i:f($i-1)+f($i-2);} 

피보나치 방정식을 직접적으로 표현이다

function f($i) 
{ 
    if $(i < 2) 
     return $i; 
    return f($i-1) + f($i-2); 
} 

을 의미한다.

다른 함수는 생성 된 결과의 캐시를 생성하고 사용합니다. fib (4)를 평가 한 이후로 중요한 최적화입니다. 예를 들어 fib (2)를 3 번 ​​또는 4 번, fib (1)을 상당히 평가합니다 몇 가지 더.

+0

그래서 내가 작성한 코드가 실제로 더 효율적입니까? – Greg

+0

예! F (100)에서 두 가지 기능을 모두 시도하십시오. –

3

여기에 if 문이 있습니다. ternary operator이라고합니다.

condition ? if true : if false 

$ i가 2보다 작은 경우 $ i를 반환하고 그렇지 않으면 f ($ i-1) + f ($ i-2)를 반환합니다. 필자는 재귀 함수 호출이 여러분이 이해하는데 어려움을 겪고있는 것은 아니라고 가정하고 있지만, 만약 여러분이 그것을 구글로 사용한다면 반복적 인 피보나치 코드의 예제가 상당하다.