為什麼我的 Python 遞歸函數有時不回傳任何值?

Susan Sarandon
發布: 2024-11-03 18:22:29
原創
793 人瀏覽過

Why Does My Python Recursive Function Sometimes Return None?

為什麼 Python 遞歸函數有時不會傳回任何內容

與迭代函數不同,遞歸函數依賴於遞歸呼叫來傳回值。當函數被多次呼叫時,需要對返回值進行適當處理以獲得所需的輸出。

考慮以下Python程式碼:

<code class="python">def gcdIter(a, b):
    a, b = min(a, b), max(a, b)
    if b % a == 0:
        print(a)
        return a
    gcdIter(a, b % a)</code>
登入後複製

此函數旨在找出最大的使用遞歸計算兩個數字的公約數。但是,對於某些輸入,它可能會傳回 None,因為遞歸呼叫的返回值未正確處理。

<code class="python">print(gcdIter(306, 136)) # Returns None
print(gcdIter(42, 84)) # Returns 42</code>
登入後複製

要解決此問題,程式碼需要將遞歸呼叫的回傳值傳回主函數。透過修改 gcdIter(a, b % a) 行以傳回 gcdIter(a, b % a),函數將正確傳回最大公約數。

<code class="python">def gcdIter(a, b):
    a, b = min(a, b), max(a, b)
    if b % a == 0:
        print(a)
        return a
    return gcdIter(a, b % a)</code>
登入後複製

或者,可以將該函數重寫更多緊湊地為:

<code class="python">def gcd_iter(a, b):
    return gcd_iter(b, a % b) if b else abs(a)</code>
登入後複製

以上是為什麼我的 Python 遞歸函數有時不回傳任何值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板