一位朋友向我提出了一个挑战,要在 python 中构建一个高效的斐波那契函数。所以我开始测试不同的递归方式(我没有很高的数学技能来思考复杂的算法,请不要给我看一个有效的斐波那契函数,这不是问题)。
然后我尝试了两种不同的解决方案:
解决方案1:
def fibo(n):
if n > 1:
return fibo(n-1)+fibo(n-2)
return 1
解决方案2:
def fibo(n):
if n < 1:
return 1
return fibo(n-1)+fibo(n-2)
然后,我为每个运行了这个:
res = map(fibo, range(35))
print res
现在,我怀疑可能存在效率差异(我不能确切地说出为什么)。但我预计会有一个小的差异。结果完全让我震惊。差别很大。第一个耗时 7.5 秒,而第二个耗时 12.7 秒(几乎是两倍!)。
谁能向我解释为什么?那些本质不是一样的吗?