为什么这段代码的执行时间会超过30S

2013-12-25 03:46:31 +08:00
 kennedy32
function tuzi($x){
if($x == 0 || $x == 1){
return 1;
}else{
return tuzi($x-1)+tuzi($x-2);
}
}
function testtuzi($n){
for ($i=0;$i<=$n;$i++){
echo "兔子在".$i."月的数目是".tuzi($i)."<br/>";
}
}
testtuzi(60);
6811 次点击
所在节点    PHP
46 条回复
tonic
2013-12-25 23:21:22 +08:00
可以改成尾递归的... 或者直接改迭代
kennedy32
2013-12-25 23:39:09 +08:00
@vibbow
@pljhonglu
@hourui

E3 1230 v2 30s跑到36行
vibbow
2013-12-26 06:33:17 +08:00
@kennedy32 你怎么做到那么快的?
我 i7-4930mx 跑到 testtuzi(36); 花了332秒...
wizardoz
2013-12-26 09:19:32 +08:00
@kennedy32 正确的应该是从底向上,从n = 1 累加到n = x。所以问题不在于用了递归调用,而是在于选了一种有很多冗余计算的算法。
kennedy32
2013-12-26 12:07:55 +08:00
@vibbow 我还觉得慢呢,虚拟主机都能跑35
huafang
2014-01-14 22:30:38 +08:00
你函数还没定义好,就内部调用。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/94455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX