使用列表函数的奇怪斐波那契结果

Strange Fibonacci results using a list function

我遇到了一个非常好的斐波那契数列实现,但我无法理解它的具体工作原理。以下是我为解决问题而尝试过的两种实现方式:

<?php

fibo(1000);
fibo2(1000);

function fibo($n){
    list($a, $b) = [0, 1];

    while($a<=$n){
        echo $a . " ";
        list($a, $b) = [$b, $a + $b];
    }
    echo "\n";
}

function fibo2($n){
    $a = 0;
    $b = 1;

    while($a<=$n){
        echo $a . " ";
        $a = $b;
        $b = $a + $b;
    }
    echo "\n";
}
?>

以上两个函数分别产生如下结果: 斐波那契: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 fibo2: 0 1 2 4 8 16 32 64 128 256 512

您能解释一下为什么会出现不同的结果吗?

解释重复:

这与 $a 在第二次实现中设置为 $b 的值时失去其值有关。在第一个实现中,list() 的使用使这些输入成为 参数 ,因此在分配时它们的值不会丢失。在这种情况下,对于 list(),在定义 $b.

时,可以在赋值中正确使用 $a 的值

例如:

</p> <pre><code>function fibo2($n){ $a = 0; $b = 1; while($a<=$n){ echo $a . " "; $save_a = $a; $a = $b; $b = $save_a + $b; } echo "\n"; } fibo2(1000);

这更正了第二个实现。

输出为:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987