這種遞歸解決方案如何逐步工作。我無法理解函數中每次發生返回時字符串和索引發生了什麼。謝謝需要幫助瞭解遞歸解決方案以扭轉列表
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]
這一行需要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'
然後你需要學習基本的調試:跟蹤程序和觀察。 這是一個簡單的版本。
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