我正在尝试使用动态编程实现Fibonacci序列。它显示错误。这有什么不对?
def fibo(n): # n is the nth Fibonacci no. in the sequence
fib = {} # dict to store earlier values
for k in range(1, n + 1): # iterating each time
if k <= 1 :
f = 0
if k == 2 :
f = 1
else:
f = fib[k - 1] + fib[k - 2] # looking up in the fib{}
fib[k] = f
return fib[n] # returns the nth Fibonacci number
n = int(input('Enter n = '))
print('%dth fibo no. is = %d' %(n, fibo(n))) # calling n printing
我只能假设您的初始错误是由您的缩进造成的。正确缩进时,代码运行时没有错误。
由于你将在k == 1
和k == 2
执行相同的操作,无论n的值如何,将这些值分配给循环之外更有意义,并在以后开始循环。
fib = {1: 0, 2: 1}
在此更改之后,在更正缩进后,您的功能类似于以下内容:
def fibo(n):
fib = {1: 0, 2: 1}
for k in range(3, n + 1):
f = fib[k - 1] + fib[k - 2]
fib[k] = f
return fib[n]
n = int(input('Enter n = '))
print('%dth fibo no. is = %d' %(n, fibo(n)))