2016-04-25 59 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] 

這一行需要S的從第二個字符的子字符串(索引1)結束時,它反轉遞歸然後將第一個字符(索引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