在做一道練習題(參照下篇博文《在當前目錄下遞歸的查找包含指定字符串的文件》)的時候,發現函數中的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