如何在Python递归函数的末尾返回一个列表
我在用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或任何外部库呢?
如果不行,为什么?(如果可以,那怎么做呢?)
谢谢!:)
2 个回答
3
你最后一行也需要加一个 return
:
return fib(start, leng)
如果没有这个,来自“逃生路线”的返回值就无法传回去。
3
只需要把最后一行改成这样:
return fib(start, leng)
这样做会沿着递归的路径继续进行“下一步”的工作,并返回最终的结果,这个结果是基于你在代码中早些时候定义的基准情况,作为你的退出方式:
# Escape route
if len(start) == leng:
print start
return start
一旦你在退出方式中遇到返回,返回的结果就会沿着调用栈向上回传,每次调用return fib(start, leng)
都会把完整的答案返回给自己。当调用栈回到你最开始调用这个函数的地方(在其他地方调用的),函数就真正完成了,并返回你期望的值。