标题:初学者关于python递归的一点问题
只看楼主
yujianwu89
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-4-25
结帖率:50%
已结贴  问题点数:5 回复次数:1 
初学者关于python递归的一点问题
最近在看到python递归法来反转字符串的时候,关于其代码有一点不理解:
def reverse2(s):
    if s=="":
        return s
    else:
        return reverse2(s[1:])+s[0]

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

难道python的字符串跟C语言一样,也会在内存里的字符串后面加入一个‘\0’来表示空的意思吗?
搜索更多相关主题的帖子: return python C语言 字符串 
2017-05-20 12:24
sunb3
Rank: 2
来 自:北京
等 级:论坛游民
威 望:3
帖 子:34
专家分:94
注 册:2017-4-20
得分:5 
你看一下圆括号的位置,明白了吧?
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]

除了基础……我什么都不会……
2017-05-21 10:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477179-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013427 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved