使用列表函数的奇怪斐波那契结果
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
我遇到了一个非常好的斐波那契数列实现,但我无法理解它的具体工作原理。以下是我为解决问题而尝试过的两种实现方式:
<?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