我正在使用Python中的斐波那契序列(我知道带有yield的实现,但希望用递归实现它)并最终得到以下代码片段:
def fib(start, leng):
""" Recursive Fibbo"""
# Should be lists
if type(start) == int:
start = [start]
# Escape route
if len(start) == leng:
print start
return start
# Run
else:
if int(start[-1]) == 0:
start.append(1)
else:
if len(start) == 1:
start.append(start[-1])
next_number = int(start[-1]) + int(start[-2])
start.append(next_number)
fib(start, leng)
现在,它的工作原理如下:
>>> a = fib(0, 10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
>>> type(a)
<type 'NoneType'>
>>>
它计算序列,最后打印出来......但...... 我怎么做才能返回列表呢?
是否可以不使用任何其他辅助函数,也不使用yield而不使用任何外部库?
如果没有,为什么? (如果是,如何)?
谢谢! :)
答案 0 :(得分:3)
只需将最后一行更改为
即可 return fib(start, leng)
这将在递归线上进行&#34;下一位&#34;工作并返回基于您之前在代码中定义的基本案例的最终产品作为逃生路线:
# Escape route
if len(start) == leng:
print start
return start
一旦你在逃生路线中点击返回,返回就会传播回调用堆栈,每次调用return fib(start, leng)
都会返回完整的答案。一旦调用堆栈返回到对函数的原始调用(在其他地方进行),该函数实际上完成并返回您的预期值。
答案 1 :(得分:3)
您的最后一行也需要是return
:
return fib(start, leng)
如果没有这个,你的“逃生路线”的返回值就不会传播回来。