#编写一个函数Fib),带一个整数参数n,输出是Fibonacc1数列的第n项。
def fib(n):
1i=0
if n==1 or n==2:
return 1
else:
return fib(n-1)+fib(n-2)
试输出Fib(1000)。
1.发现结果不返回,原因是
使用字典重新定义fib函数,字典中每一个元素是一个键值对,其中键是整数n,值是其对应的fib(n)。 n:fib(n)
a.函数中当需要某值时,优先在字典中执行查找,若不存在再计算,并且把计算结果写入字典。
b.这个思想称为:用空间换时间。
实验:设计新的函数Fibdt(n),并输出Fibdt(1000)的值。
使用字典加速函数返回
d = {1:1, 2:1}
def fibdt(n):
if n in d:
return d[n]
else:
d[n] = fibdt(n-1) + fibdt(n-2)
return d[n]
print(fibdt(1000))
def fib(n):
li=0
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)
def Fibdt(n, memo={}):
if n in memo:
return memo[n]
else:
memo[n] = fib(n)
return memo[n]
print(Fibdt(1000))
1865

被折叠的 条评论
为什么被折叠?



