需要帮助了解反转List的递归解决方案

时间:2016-04-25 18:59:39

标签: python string recursion

这种递归解决方案如何逐步完成。每次在函数中发生返回时,我都无法理解字符串和索引的内容。感谢

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

print(rreverse(s))

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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