[英]How to return a list on the end of a recursive function in Python
我正在使用Python中的fibonacci序列(我知道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?
如果沒有,為什么? (如果是,如何)?
謝謝! :)
只需將最后一行更改為
return fib(start, leng)
這將在遞歸行中完成“下一部分”工作,並返回基於您先前在代碼中定義的基本情況的最終產品作為逃生路線:
# Escape route
if len(start) == leng:
print start
return start
一旦在逃生路線中擊中了返回,返回return fib(start, leng)
傳播回調用堆棧,每個return fib(start, leng)
調用將return fib(start, leng)
完整的答案。 一旦調用堆棧返回到對函數的原始調用(在其他地方進行),該函數實際上就會完成並返回您的期望值。
您的最后一行也需要return
:
return fib(start, leng)
否則,您的“轉義路線”返回值將不會傳播回來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.