簡體   English   中英

如何在Python的遞歸函數的結尾處返回列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM