python之遞歸與yield的結合


python中簡單的遞歸類似於這樣:

def countdown(n):
    if n > 0:
        print(n)
        countdown(n-1)

countdown(10)

但是如果把print改為yield后就出現問題了

def countdown(n):
    if n > 0:
        yield n
        countdown(n-1)

t = countdown(10)
for x in t:
    print(x)

只能輸出第一個元素,yield后面的遞歸調用根本運行不了,因為它只是一生成器,既沒有運行也沒有輸出。

解決辦法是把遞歸調用改為循環遍歷,代碼如下:

def countdown(n):
    if n > 0:
        yield n
        for i in countdown(n-1):
            yield i


t = countdown(10)
for x in t:
    print(x)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM