ホームページ  >  記事  >  バックエンド開発  >  再帰コードが継続的に None を返すのはなぜですか?

再帰コードが継続的に None を返すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 01:11:30631ブラウズ

Why Does My Recursive Code Continuously Return None?

再帰コードは継続的に何も返しません

次の再帰コード スニペットがあるとします:

<code class="python">def isIn(char, aStr):
    ms = len(aStr)/2
    if aStr[ms] == char:
        print('i am here now')
        return True
    elif char > aStr[ms] and not ms == len(aStr)-1:
        aStr = aStr[ms+1:]
    elif char < aStr[ms] and not ms == 0:
        aStr = aStr[0:ms]
    else:
        return False
    isIn(char, aStr)

print(isIn('a', 'ab'))</code>

予期しない動作が発生する可能性がありますここで、コードは期待される True 値の代わりに None を返します。この問題は、else ブロック内の最後の再帰呼び出しに明示的な return ステートメントが欠けているために発生します。

修正されたコードには、次の追加が含まれる必要があります。

<code class="python">else:
    return isIn(char, aStr)</code>

このシナリオでは、関数が再帰するとき、再帰呼び出しの戻り値を関数自体に割り当てます。再帰呼び出しで文字が見つからなかった場合、False が返され、関数はそれを独自の値として返します。

最後の再帰呼び出しで明示的な return ステートメントがないと、関数は指定された値なしで終了に到達します。戻り値。その結果、暗黙的に None が返されることになり、元のコードが None を返し続けたのはそのためです。

以上が再帰コードが継続的に None を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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