注册 登录
编程论坛 Python论坛

初学者关于python递归的一点问题

yujianwu89 发布于 2017-05-20 12:24, 2120 次点击
最近在看到python递归法来反转字符串的时候,关于其代码有一点不理解:
def reverse2(s):
    if s=="":
        return s
    else:
        return reverse2(s[1:])+s[0]

此代码中的基例是字符串s为空时返回s结束递归。但是如else下的代码所示,输入的字符串s不断被更新,为什么会有被切片到空的时候呢?

难道python的字符串跟C语言一样,也会在内存里的字符串后面加入一个‘\0’来表示空的意思吗?
1 回复
#2
sunb32017-05-21 10:32
你看一下圆括号的位置,明白了吧?
return reverse2(s[1:])+s[0]
懂了?每次s[1:]都是在变少的,而最后层层递归后通过return统一输出出来,所以看起来就是你的字串一直在更新可以无限循环。
你其实在return前面加一句这个就立刻明白了:
print(s[1:])


另外空字串我个人建议你这么改一下:
程序代码:

def reverse2(s):
  if not s:
    return s
  else:
    return reverse2(s[1:]) + s[0]
1