这种递归解决方案如何逐步完成。每次在函数中发生返回时,我都无法理解字符串和索引的内容。感谢
s = 'string'
def rreverse(s):
if s == '':
return s
else:
return rreverse(s[1:]) + s[0]
print(rreverse(s))
答案 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