簡體   English   中英

需要幫助理解反向列表的遞歸解決方案

[英]Need help understanding a recursive solution to reverse a List

這個遞歸解決方案是如何逐步工作的。 每次在函數中發生返回時,我都無法理解字符串和索引發生了什么。 謝謝

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM