递归函数clearword中参数word为何自动更新?求解析
递归函数
clearword的问题解答 一、为什么感觉参数word自动更新?
你看到的不是原参数被修改,而是递归调用时传递了新的子字符串。Python里字符串是不可变类型,没法直接修改原字符串的内容。每次调用clearword(word[1:])时,word[1:]会生成一个从第二个字符开始的新子串,把这个新串传给下一层递归函数,原调用层的word根本没变化。你觉得“自动更新”是因为递归层层返回的是处理后的子串,最终结果看起来像是原串被修改了而已。
比如调用clearword("WWWoooorrrldd"),第一次递归传的是"WWoooorrrldd",第二次传"Woooorrrldd",直到传到"rldd"——这时候前两个字符r和l不一样,就停止截断了。
二、最后一行return word的作用
这行是递归的“终止分支”之一:当当前字符串的第一个字符和第二个字符不相等时,直接返回当前的word,作为这一层递归的结果传递给上一层。
举个例子:当递归到word = "rldd"时,word[0] != word[1],触发return word,把"rldd"返回给上一层调用(也就是之前传"rrldd"的那层),那层的return clearword(...)就会拿到这个"rldd",再继续返回给更上层,直到回到最初的调用,最终结果就是"rldd"。
另外补充:这个函数逻辑有缺陷,它只能去掉开头连续重复的字符,没法处理中间或结尾的重复(比如"rldd"里的两个d就不会被去掉)。如果要实现去掉所有连续重复字符,得调整逻辑,比如在返回时把当前字符和递归结果拼接起来。
内容的提问来源于stack exchange,提问作者KarimBasem
相关产品推荐
相关产品推荐

