def fib1(n):
if n==0:
return 0
elif n==1:
return 1
else:
return fib1(n-1) + fib1(n-2)
print fib1(7)
问题是:为什么输入7算出来的是13而不是11,(n-1)+(n-2)不是等于(7-1)+(7-2)吗?13是怎么来的
贴主说fib1的慢,就是因为每次都要计算前面已经算过的项目.这里将上述算法进行稍微改进。怎么看出这段程序会计算已经算过的项目?
def fib3(n):
a, b = 0, 1
for i in range(n):
a, b = b, a+b
return a
据说这段会比上面的快,特别是n很大的时候,这段会快很多。为什么这段会快呢?大神解答下
n = int(raw_input())
if n==0:
print '0'
elif n==1:
print '1'
else:
m = (n-1) + (n-2)
print m
这段和第一段有哪里不一样,为什么这段计算结果不一样
第一第三问不予回答,自行去恶补 python 语法
第二问:
因为前者是递归调用,调用栈如下:
明眼人都看出有多慢。更何况没有尾递归优化。
而后者,只是从1循环到7,计算次数少了很多。