理解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中文網其他相關文章!