我得到了答案很好,但是当我运行下面的代码,PHP - 项目欧拉#2
$total = 0;
$x = 0;
for ($i = 1;; $i++)
{
$x = fib($i);
if ($x >= 4000000)
break;
else if ($x % 2 == 0)
$total += $x;
print("fib($i) = ");
print($x);
print(", total = $total
");
}
function fib($n)
{
if ($n == 0)
return 0;
else if ($n == 1)
return 1;
else
return fib($n-1) + fib($n-2);
}
,我感到我已经超过30秒的最长执行时间的警告。你能给我一些关于如何改进这个算法的指针,或者指向代码本身的指针吗?顺便提一下,问题出现在here。
仍然不确定。如果我们已经将fib(14)的值存储在x中,那么有一种方法不必通过fib(15)递归,但是使用x的值可以更快速地计算fib(15)? – rubycon 2011-02-28 22:48:13
如果你还有fib(13)的值,该怎么办? – markijbema 2011-02-28 22:54:58
啊,我明白你的意思了。是的,我重写了不使用递归函数的代码,并且加速了很多。 – rubycon 2011-02-28 23:03:32