この再帰的解法はどのように動作しますか?関数内でリターンが発生するたびに、文字列とインデックスに何が起こっているのかを理解することができません。プログラムをトレースして見る:ありがとうリストを逆にする再帰的解を理解する助けが必要です。
s = 'string'
def rreverse(s):
if s == '':
return s
else:
return rreverse(s[1:]) + s[0]
print(rreverse(s))
この再帰的解法はどのように動作しますか?関数内でリターンが発生するたびに、文字列とインデックスに何が起こっているのかを理解することができません。プログラムをトレースして見る:ありがとうリストを逆にする再帰的解を理解する助けが必要です。
s = 'string'
def rreverse(s):
if s == '':
return s
else:
return rreverse(s[1:]) + s[0]
print(rreverse(s))
return rreverse(s[1:]) + s[0]
この行は、再帰的にし、それを反転させ、最後に2つ目の文字(指標1)からsの部分を取ります最初の文字(インデックス0)を追加します。このようにして、文字列全体が逆になります。文字列が空の場合、再帰は明らかに終了します。入力文字列
"abcd"
について再帰は次のように行くだろう:
abcd
rreverse(bcd) + a
(rreverse(cd) + b) + a
((rreverse(d) + c) + b) + a
(((rreverse('') + d) + c) + b) + a
'' + d + c + b + a
d + c + b + a
dc + b + a
dcb + a
'dcba'
は、その後、あなたは基本的なデバッグを学ぶ必要があります。 ここには簡単なバージョンがあります。
s = 'string'
def rreverse(s):
print "ENTER", s
if s == '':
return s
else:
result = rreverse(s[1:]) + s[0]
print "RETURN", s, result
return result
print(rreverse(s))
一般的な再帰の概念に問題がある場合は、プログラムをトレースすることでそのプロセスを追跡することができます。また、このサイトのさまざまな説明を見てください。それらのどれでもあなたに再帰の良い把握を与えていない場合は、この質問を更新するか、あなたの特定の混乱の点で新しい質問を投稿してください。
出力...私は右ここにプログラムを持っているので:
ENTER string
ENTER tring
ENTER ring
ENTER ing
ENTER ng
ENTER g
ENTER
RETURN g g
RETURN ng gn
RETURN ing gni
RETURN ring gnir
RETURN tring gnirt
RETURN string gnirts
gnirts
はSO、「再帰作業[パイソン]をどうするか」を検索してみてください。 – Prune