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

巴尔迪

我遇到了一个非常好的Fibonacci系列实现,但是我很难理解它的工作原理。这是我尝试解决该问题的两个实现:

<?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";
}
?>

以上两个函数分别产生以下结果:fibo: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

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

GetSet

重复说明:

这与以下事实有关:在第二个实现中将其$a设置为时会丢失其值$b在第一种实现中,使用list()make来输入参数,因此在分配时它们的值不会丢失。在这种情况下,对于list(),$a可以在定义时在分配中正确使用的值$b

例如:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章