我想从
Project Euler(BTW,问题25)中解决问题,我在Python中找到了一个解决方案:
fibonacci = 1
old1 = 0
old2 = 1
limit = 1000
i = 1
while len(str(fibonacci)) < limit:
fibonacci = old1 + old2
old1 = old2
old2 = fibonacci
i = i + 1
print(i)
计算需要1.5秒.
我在PHP中实现相同,这是代码:
$fibonacci = 1;
$old1 = 0;
$old2 = 1;
$limit = 1000;
$i = 1;
while (strlen((string)$fibonacci) < $limit){
$fibonacci = $old1 + $old2;
$old1 = $old2;
$old2 = $fibonacci;
$i = $i + 1;
}
print($i);
它花了30多分钟,还在计算…
我知道Python被认为比PHP快,但仍然不应该有这么大的区别.如何提高我的PHP代码以获得更快的结果,如果有办法呢?
编辑:
我根据以下意见编辑这篇文章,所以首先我的解决方案不会工作.
一个解决方案可以代替旧的,而把这一个:
while (strlen(number_format($fibonacci, 0, '', '')) < $limit){ ... }
但再次是一个很大的速度问题.
所以最终的解决方案是使用BCMath:
$fibonacci = '1';
$old1 = '0';
$old2 = '1';
$limit = 1000;
$i = 1;
while (strlen($fibonacci) < $limit){
$fibonacci = bcadd($old1, $old2);
$old1 = $old2;
$old2 = $fibonacci;
$i = $i + 1;
}
echo $fibonacci . "
";
print($i);
因此,您可以以与PHP中的Python相同的速度获得结果.