PHP: Birisi bu kodu nasıl çalıştığını açıklayabilir misiniz?

5 Cevap php

Ben bu ödev değil söz. Ben sadece merak acemi değilim.

Bu nasıl yapar:

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

(Akıllı birisi tarafından yazılmış)

Bu da aynı sonucu

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);
}

(Mayın)

Ben sadece sözdizimi alamadım herhalde. Orada bir if ifadesi var mı?

5 Cevap

Operatörü "?" Üçlü operatör olarak adlandırılır. ? P1 p2: Bu gibi kullanılır p1, sonra P2, P3 başka doğruysa diyor p3.

Orada bir if ifadesi vardır. Bir ternary operator denir.

condition ? if true : if false

$ I az 2 return $ i, başka dönüş f ($ i-1) + f ($ i-2) ise. Ben recursive fonksiyon çağıran sorun anlamakta yaşıyorsanız ne değildir varsayarak yaşıyorum, ama eğer bunun için google eğer özyinelemeli Fibonacci kod örnekleri bir ton var.

İlk fonksiyon kısaltmadır. İşte o yapıyor ne

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

Bu ikisinden daha az eğer tarafından, fonksiyon hatırlattı olmak zorunda değildir. 2 ya da daha büyükse, işlev özyinelemeli denir.

Soru işareti, bir koşullu ifade:

x ? a : b

a değerlendirir eğer yanlış {[(1)] true}, ya da b ise.

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

araç

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

Yani Fibonacci denklemin doğrudan ifadesidir.

Diğer fonksiyon oluşturur ve oluşturulan sonuçların bir önbelleğini kullanır: Bu (4), örneğin, aksi takdirde 3 ya da 4 kez, ve fib (1) epeyce gibi daha fazla (2) yalan değerlendirmek istiyorum yalan değerlendiren beri önemli bir optimizasyon.