python遞歸中的return"陷阱"


在做一道練習題(參照下篇博文《在當前目錄下遞歸的查找包含指定字符串的文件》)的時候,發現函數中的return的值竟然是None,百思不得其解,嘗試化繁為簡,用以下的簡單的代碼驗證了一下

問題版本代碼:為什么return i 返回的是 i , 而print(i)得到的是 0 

def func(i):
    if i == 0:
        print(i)
        return i elif i > -2:
        i = i-1
        func(i)

print(func(3))


運行結果:
0
None

如果把遞歸過程畫成流程圖,或許更容易理解一些

case1: 有遞歸的情況

case2: 無遞歸的情況

錯誤的解決方案:

def func(i):
    if i == 0:
        print(i)
        return i
    elif i > -2:
        i = i-1
        func(i)
        return(i) print(func(3))


運行結果:
0
2

仍然圖解一下,更直觀

正確的解決方案一:

def func(i):
    if i == 0:
        print(i)
        return i
    elif i > -2:
        i = i-1
        return(func(i))

print(func(3))


運行結果:
0
0

正確的解決方案二:

result = None
def func(i):
    if i == 0:
        print(i)
        global result
        result = i
    elif i > -2:
        i = i-1
        func(i)
    return result

print(func(3))


運行結果:
0
0

 

 

參考文章

https://www.cnblogs.com/yechenkai/p/7143475.html

https://www.cnblogs.com/lincappu/p/8146141.html

 


免責聲明!

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



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