我遇到了一个非常好的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
您能否解释为什么会出现不同的结果?
重复说明:
这与以下事实有关:在第二个实现中将其$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] 删除。
我来说两句