在python中使用动态编程实现斐波那契

时间:2018-09-04 18:05:56

标签: python dynamic-programming

我正在尝试使用动态编程来实现斐波那契数列。 显示错误。怎么了

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

1 个答案:

答案 0 :(得分:0)

我只能假设您的最初错误是由您的缩进引起的。正确缩进后,您的代码可以正常运行。

由于无论n的值如何,您都将在k == 1k == 2处执行相同的操作,因此在循环外分配这些值并稍后开始循环更有意义。 / p>

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)))