為什麼 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中文網其他相關文章!