首頁  >  文章  >  後端開發  >  為什麼我的遞歸 GCD 函數不回傳任何值?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 18:32:31247瀏覽

Why Does My Recursive GCD Function Return None?

理解Python遞歸函數的回傳值

在遞歸函數中,正確處理遞歸呼叫的回傳值對於取得想要的結果。讓我們檢查提供的程式碼,了解為什麼它在某些情況下傳回 None。

gcdIter 函數旨在使用迭代方法找到兩個數字的最大公約數 (GCD)。然而,問題出在遞歸呼叫上:

<code class="python">gcdIter(a, b%a) </code>

函數無法指派遞歸呼叫的回傳值。預設情況下,當函數未明確傳回值時,Python 將傳回 None。因此,當函數被遞歸呼叫時,none 值會覆寫正確的 GCD 值。

為了解決這個問題,我們需要使用return 關鍵字傳遞遞歸呼叫的回傳值:

<code class="python">return gcdIter(a, b % a)</code>

現在,函數將遞歸呼叫所得的GCD值賦值,確保傳回正確的結果。

此外,可以透過在函數定義中使用多個目標賦值來進一步簡化程式碼:

<code class="python">def gcdIter(a, b):
    a, b = min(a, b), max(a, b)
    if b % a == 0:
        return a
    return gcdIter(a, b % a)</code>

GCD 迭代函數的更緊湊版本可以表示如下:

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

透過更正遞歸呼叫並使用適當的回傳值,gcdIter 函數可以有效地找到兩個數字的GCD,在任何情況下都不會傳回None。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn