Python 遞歸函數返回值為 None 的解決辦法

在使用 Python 開發的過程中,避免不了會用到遞歸函數。但遞歸函數的返回值有時會出現意想不到的情況。

下面來舉一個例子:

>>> def fun(i):
...     i += 1
...     if i < 5:
...         fun(i)
...     else:
...         return i
...
>>> r = fun(0)
>>> print(r)

比如上面這段程式碼,乍一看沒什麼問題,但返回值並不是我們期望的 5,而是 None

>>> print(r)
None

要解決這個問題也簡單,就是在執行遞歸調用的時候,加上 return 語句。

修改之後的程式碼如下:

>>> def fun(i):
...     i += 1
...     if i < 5:
...         return fun(i)
...     else:
...         return i
...
>>> r = fun(0)
>>> print(r)
5

現在輸出的結果就符合我們的預期了。

最後補充一句,如果想要了解這背後深層的原理,可以看看函數調用棧相關的資料,這裡就不過多介紹了。

本文就到這裡了,如果覺得有用的話歡迎點贊轉發關注,謝謝。


推薦閱讀:

  • 電腦經典書籍
  • 技術部落格 硬核後端開發技術乾貨,內容包括 Python、Django、Docker、Go、Redis、ElasticSearch、Kafka、Linux 等。
  • Go 程式設計師 Go 學習路線圖,包括基礎專欄,進階專欄,源碼閱讀,實戰開發,面試刷題,必讀書單等一系列資源。
  • 面試題匯總 包括 Python、Go、Redis、MySQL、Kafka、數據結構、演算法、編程、網路等各種常考題。
Tags: