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>
この関数は、最大値を見つけることを目的としています。再帰を使用した 2 つの数値の公約数。ただし、再帰呼び出しの戻り値が正しく処理されないため、特定の入力に対して 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 中国語 Web サイトの他の関連記事を参照してください。