python - 使用递归返回斐波那契序列列表的正确方法
问题描述
我了解如何使用迭代方法以及动态编程方法返回斐波那契数列。
通过递归,我理解了斐波那契的递归树。以及如何返回第 N 个斐波那契数
def fib(num):
if num <= 2:
return num
return fib(num -1) + fib(num-2)
print(fib(5))
上面的代码返回8
很棒,但我想了解如何通过更新上面的递归代码来返回序列列表。
eg: [1,1,2,3,5,8]
解决方案
使用以 0 开头的斐波那契数列,我们可以递归地重写您的代码,无需任何外部数据,方法是:
def fib(index):
if index <= 2:
return [0, 1][:index]
sequence = fib(index - 1)
sequence.append(sum(sequence[-2:]))
return sequence
print(fib(11))
输出
> python3 test.py
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>
但正如@TomKarzes 评论的那样,有更好的算法。但是由于您坚持以递归方式执行此操作,因此效率不是主要问题。
推荐阅读
- .net - 如何在消息框中显示数据库值
- oracle - V$CONTAINERS 仅显示 CDB 根目录
- javascript - 声明具有相同值的对象属性
- python - Pandas 多索引聚合
- c++ - 数组值输出不正确
- python - Django Exception KeyError 'data' - 只运行一次
- graph - 如何使用图形资源管理器将文件上传到共享驱动器
- node.js - Node JS REST API图像上传,我如何只上传jpg文件而不上传png?
- vue.js - 在 Mocha 和 Playwright 的所有测试之前运行的 Root Hook 插件
- ios - SwiftUI:TabView 和 NavigationView 在 iPhone 上玩得很好,但在 iPad 上不行?