ホームページ >バックエンド開発 >Python チュートリアル >Python 再帰関数が時々何も返さないのはなぜですか?

Python 再帰関数が時々何も返さないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 18:22:29822ブラウズ

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>

この関数は、最大値を見つけることを目的としています。再帰を使用した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。