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 문장이 있습니까?
해결책
연산자 "?" Ternary Operator입니다. P1? P2 : P3 P1이 참이면 P2, 그렇지 않으면 P3처럼 사용됩니다.
다른 팁
거기에는 if 문장이 있습니다. a라고합니다 3 배 운영자.
condition ? if true : if false
$ i가 2 미만인 경우 $ i를 반환하면 f ($ i-1) + f ($ i-2)를 반환합니다. 재귀 함수 호출이 이해에 어려움을 겪고있는 것이 아니라고 가정하고 있다면 Google에 대한 재귀적인 Fibonacci 코드의 예가 많이 있습니다.
첫 번째 함수는 속기입니다. 여기가하는 일이 있습니다
if($i < 2) { // $i < 2 ?
return $i;
}
else { // :
return f($i-1)+f($i-2);
}
2 미만이면 함수를 리콜 할 필요가 없습니다. 2 이상이면 기능이 재귀 적으로 호출됩니다.
물음표는 조건부 표현입니다.
x ? a : b
평가합니다 a
만약에 x
사실입니다 b
거짓이라면.
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);
}
그것은 Fibonacci 방정식의 직접적인 표현입니다.
다른 함수는 생성 된 결과의 캐시를 생성하고 사용합니다. 예를 들어 FIB (4)를 평가하기 때문에 중요한 최적화입니다. 예를 들어, 그렇지 않으면 FIB (2)를 3 ~ 4 배, FIB (1)를 상당히 더 평가합니다.
제휴하지 않습니다 StackOverflow