python - 尾递归斐波那契

标签 python big-o fibonacci

如何在 O(n) 中实现没有循环运行的递归斐波那契函数?

最佳答案

通常我会反对发布这样的家庭作业问题的答案,但到目前为止发布的所有内容似乎都过于复杂了。如上面的评论所述,您应该像迭代一样使用递归来解决问题。

这是迭代解决方案:

def fib(n):
  a, b = 0, 1
  while n > 0:
    a, b = b, a+b
    n -= 1
  return a

这是一个等效的递归解决方案:

def fib(n):
  def fib_help(a, b, n):
    return fib_help(b, a+b, n-1) if n > 0 else a
  return fib_help(0, 1, n)

请注意,在这两种情况下,我们实际上计算了 Fn+1,但返回 Fn 作为结果。这与您收到的“提示”非常吻合。

我希望您能花时间比较这两个解决方案并说服自己它们是等价的。了解如何将迭代解决方案转换为等效的递归解决方案(反之亦然)是一项需要培养的好技能。

关于python - 尾递归斐波那契,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22111252/

相关文章:

algorithm - Collat​​z猜想: loose upper/lower bounds?

java - 斐波那契数列 : Sum of all numbers

python - 为什么这没有分配正确的值?

python - 使用setuptools创建包——部分目录大小写的改变

python - Pydoc 找不到已安装的模块

algorithm - 算法分析——三个嵌套依赖循环的时间复杂度

algorithm - 有没有时间复杂度O(lg * n)(迭代对数函数)的算法?

scala - 在 Scala 中创建流的递归方法

python - 如何在python中编写复杂的排序?

Python 子进程 - 将 stdout/err 重定向到两个地方