【发布时间】:2021-09-26 06:36:36
【问题描述】:
我了解如何使用迭代方法返回斐波那契数列, 以及动态规划方法。
通过递归,我理解了斐波那契的递归树。 以及如何返回第 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]
【问题讨论】:
-
在
num <= 2的情况下,您能想出一条规则来告诉您列表应该是什么吗?如果您有第一个num斐波那契数列的列表,您能想出一个代码来创建第一个num+1斐波那契数列的新列表并返回它吗? -
斐波那契数列从 1、1、2 开始,因此您的实现永远不会产生数列中的第一个 1。我相信 fib(1) 和 fib(2) 通常都是 1,因此 fib(0) 是 0。使用 fib(0) = 0 和 fib(1) = 1 可能最简单,之后你可以使用递归.所以要修复它,只需将
<= 2更改为<= 1。要返回一个列表,只需创建一个包装函数。但请注意,如果没有记忆,您的递归实现会呈指数级增长,即它是最糟糕的实现。 -
我可以说 arr = [ -1 ] * num 然后 arr[0] = 0; arr[1] = 1. 然后递归调用 are[num]=fib(num-1) + fib(num-2) 问题是我必须在函数之外声明 arr=[] 有没有办法把它放在函数里面。
标签: python recursion fibonacci