Bir süre döngü array_sum () kullanarak

3 Cevap php

Ben PHP öğreniyorum. Sorun bu kod parçası neden çalışmadığını anlamak olması.

Özellikle: neden array_sum sonucu ($ x) (1596) $ kap daha büyüktür? Belki ise döngüler doğasını anlamak değilim, ama () bir print_r ($ x bakarak) Bana görünüyor aslında yok önce, döngü bir adım kesmek gerekir.

<?php

function fibonacci_sum($cap = 1000){

list( $cur, $nxt, $seq ) = array( 0, 1, array() );

while ( array_sum($seq) < $cap ) {

 $seq[] = $cur;    
 $add = $cur + $nxt;  
 $cur = $nxt;   
 $nxt = $add;  
 }

return $seq;

}

$x = fibonacci_sum();
echo array_sum($x);

?>

Herhangi bir fikir takdir edilmektedir.

Best, matt

3 Cevap

Bu açıdan bak: array_sum($x) $cap, daha sonra while döngüsünün gövdesi tekrar idam olurdu daha az olsaydı. While döngüsü tanımı gereği, üstündeki durumunu yürütme durduruldu Bu nedenle, while yanlış olacaktır. (*) Ben size söylemek istiyorum düşünüyorum:

while ( array_sum($seq) + $cur < $cap ) {

Bu sizin yapmak istediğiniz gibi ne olduğu, $cap sadece before Eğer aşan duracaktır.

break tabloların etkisi hakkında (*) Evet, evet, feragat.

Yürütme Basit sipariş.

Eğer küçük bir değişken watcher eklerseniz bu nasıl olur görmek çok kolay

  while ( array_sum( $seq ) < $cap )
  {
    echo $cur, ' : ', array_sum( $seq ), '<br>';
    $seq[] = $cur;
    $add = $cur + $nxt;
    $cur = $nxt;
    $nxt = $add;
  }

Bu çalıştırırsanız, son çıktıda 610 : 986. Bu nedenle, 986 döngünün bu yineleme yürütür neden olan, en az 1.000 olan, ancak döngünün ilk satır $cur $seq zaten üzerine iter - aslında tamamen habersiz olduğu Sadece kap daha toplamı creater yaptı. Yani 610 dolayısıyla 1596, bunun bir parçası olduğunu, işlev dışındaki array_sum() ne zaman.

Dizi toplamı plus the next value kapağı daha az olduğunda Peki gerçekten istiyorum.

while ( array_sum( $seq ) + $cur < $cap )

Ancak, bu işlevi hiç bir dizi döndürür bu biraz garip. Neden sadece doğrudan toplamını döndürür yok?

Toplamı while döngüsünün gövdesi girilen son kez cap daha azdır. Döngüler tüm ana dilde çalışırken bu nasıl. Bu durumda, toplam cap döngü son kez ayrıldığı zaman daha büyüktür.