递归实现交替数字和代码逻辑存疑,请求解析其运行原理
为什么这段递归代码的计算结果和你手动推导的不一样?
你的推导错误在于没有正确展开递归的嵌套关系,把连续的减法直接当成了连减,但实际上每一层递归的返回值都是作为上一层减法的减数,需要用括号包裹起来。
我们一步步拆解代码的执行过程:
初始调用
alternateDigitSum("521"):
代码返回5 - alternateDigitSum("21")计算
alternateDigitSum("21"):
代码返回2 - alternateDigitSum("1")计算
alternateDigitSum("1"):
代码返回1 - alternateDigitSum("")计算
alternateDigitSum(""):
触发终止条件,返回0
现在从底层往上回代:
alternateDigitSum("1") = 1 - 0 = 1alternateDigitSum("21") = 2 - 1 = 1alternateDigitSum("521") = 5 - 1 = 4
这就是代码得到正确结果4的原因。
再看这段递归的逻辑为什么符合题目要求:
题目要求符号交替:+5 -2 +1,等价于 5 - (2 - 1),而递归的每一层都用当前数字减去下一层的结果,刚好实现了这种交替符号的效果:
- 第一层:
+5 - (第二层的结果) - 第二层:
+2 - (第三层的结果)→ 代入后就是5 - (2 - 1) = 5 -2 +1,完全匹配题目要求的计算式。
另外,代码里的for i in n其实是多余的,因为第一次循环就return了,直接写成return int(n[0]) - self.alternateDigitSum(n[1:])效果完全一样。
内容的提问来源于stack exchange,提问作者Mikhail Rotar
相关产品推荐
相关产品推荐

