我需要创建一个python函数,它将以递归方式将fibonacci值存储在列表中,然后将该列表返回给我。然后,我可以打印该列表。这就是我所拥有的。
def recFib(x):
result = []
if x == 1:
return result.append(1)
if x == 2:
return result.append(2)
for i in range(2,x):
result.append(recFib(i-1)+recFib(i-2))
return result
我是Python的新手,所以很多概念对我来说都是新的,我似乎无法弄清楚我做错了什么。
答案 0 :(得分:1)
这是基于@ Akavall's anwer的解决方案
def recFib(x):
fibArray = [0, 1]
def fib(x):
if x < len(fibArray):
return fibArray[x]
temp = fib(x - 1) + fib(x - 2)
fibArray.append(temp)
return temp
return fib(x)
答案 1 :(得分:0)
您的代码存在一些问题,例如:
return result.append(1)
将返回None
,而不是result
并附加1
。
另外,
def recFib(x):
result = []
每次调用[]
时都会将结果设置为recFib
,我认为这不是你想要的。
我不确定我理解你的整个逻辑,对不起。
可能的解决方案是这样的:
def recFib(x):
n_to_fib = {0: 0, 1: 1}
def fib(x):
if x in n_to_fib:
return n_to_fib[x]
temp = fib(x - 1) + fib(x - 2)
n_to_fib[x] = temp
return temp
return fib(x)
if __name__ == "__main__":
result = [recFib(i) for i in range(8)]
print result
结果:
[0, 1, 1, 2, 3, 5, 8, 13]
计算新值很快,因为先前的值存储在n_to_fib
dict中,因此不必重新计算。
我们还可以修改recFib
以直接返回列表:
fib(x)
return sorted(n_to_fib.values())
而不是:
return fib(x)
答案 2 :(得分:0)
试试这个:
std::find_if()
该计划的关键在于:
def recFib(n):
if n == 1:
return [0]
elif n == 2:
return [0, 1]
else:
a = recFib(n-1)
return a + [a[-1] + a[-2]]
以下是return a + [a[-1] + b[-1]]
a # This gets the most recently created list, since it's `recFib(n-1)`
+ # Append to the next list (but does not return `None`)
[ a[-1] # Last value of `recFib(n-1)`, which is the previous value.
+ # Add to
a[-2]] # Second last value of `recFib(n-1)`, which is the second previous value.
的断点:
recFib(5)
它不需要两个功能。我发现这是作弊:
n = 3
a[-1]: 1
a[-2]: 0
n = 4
a[-1]: 1
a[-2]: 1
n = 5
a[-1]: 2
a[-2]: 1
[0, 1, 1, 2, 3]
通过循环递归函数生成列表效率非常低。每次使用该函数时,都会重新计算整个序列。