【问题标题】:Implementing fibonacci using dynamic programming in python在 python 中使用动态编程实现斐波那契
【发布时间】:2018-09-04 18:05:55
【问题描述】:

我正在尝试使用动态编程来实现斐波那契数列。 它显示一个错误。这里有什么问题?

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 对代码中的缩进非常敏感,它将帮助我们确定您的错误是逻辑错误还是语法错误

标签: python dynamic-programming


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!缩进并不是真正的问题。由于这是我第一次堆栈溢出,所以我不知道如何编辑这里的代码。问题出在 if / else 我猜。
猜你喜欢
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2019-07-11
  • 2010-09-22
相关资源
最近更新 更多