在python中使用动态编程实现fibonacci

问题描述 投票:1回答:1

我正在尝试使用动态编程实现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
python dynamic-programming
1个回答
0
投票

我只能假设您的初始错误是由您的缩进造成的。正确缩进时,代码运行时没有错误。

由于你将在k == 1k == 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)))
© www.soinside.com 2019 - 2024. All rights reserved.