私はこれらのコード行に関して質問があります。私はprint文が表示されるでしょうかを把握しようとしていた。Pythonの二重再帰の結果
def f(s):
if len(s) <= 1:
return s
return f(f(s[1:])) + s[0]
print f("abcd")
私は印刷にそれを期待していた:dcba
ではなく、それは示した:dbca
を。
誰かが私になぜこれが起こっているのか正確に説明できたら本当に感謝します。私の目標は、dcba
を印刷する方法でコードに変更するのではなく、なぜそれが動作しているのかを理解することです。提供されたすべてのヘルプに事前に感謝します。私は正確にスタックトレースを見ることができないので、 乾杯
は、むしろ無意味な変換のように見えます。このコードはどこで入手できましたか? –
あなたの期待は 'return f(s [1:])+ s [0]' not f(f(s [1:]))+ s [0] 'を返します。 –
各関数呼び出しとその結果を書き出します。 'f(f(s [1:]))'はまず 'f(s [1:])'を計算します。 'f'への二重呼び出しは' f'をもう一度呼び出す前に一種のシャッフルを行うので、結果は奇妙です。 – dashiell