2016-04-25 8 views
-1

この再帰的解法はどのように動作しますか?関数内でリターンが発生するたびに、文字列とインデックスに何が起こっているのかを理解することができません。プログラムをトレースして見る:ありがとうリストを逆にする再帰的解を理解する助けが必要です。

s = 'string' 
def rreverse(s): 
    if s == '': 
     return s 
    else: 
     return rreverse(s[1:]) + s[0] 

print(rreverse(s)) 
+0

はSO、「再帰作業[パイソン]をどうするか」を検索してみてください。 – Prune

答えて

1
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' 
0

は、その後、あなたは基本的なデバッグを学ぶ必要があります。 ここには簡単なバージョンがあります。

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 
関連する問題