数字各位求和:递归实现代码报错问题排查
问题描述
我尝试使用递归实现数字各位求和功能。
示例输入/预期输出:
Input: num = 38 Output: 2
说明: 计算过程如下
38 --> 3 + 8 --> 11 11 --> 1 + 1 --> 2
由于2是个位数,返回该结果。
但运行代码时出现如下错误:
name 'addDigits' is not defined
我的代码如下:
class Solution: def addDigits(self, num: int) -> int: while num>10: num = sum(int(i) for i in str(num)) addDigits(self,num) return num
请问我的代码存在什么问题?
问题分析与修复
你的代码主要有两个问题:
递归调用方式错误
在Python类的成员方法中,调用自身必须通过self.方法名()的形式。你直接写addDigits(self,num),Python会把addDigits当成全局函数,而非类的成员方法,因此会报"name 'addDigits' is not defined"的错误。正确写法是self.addDigits(num)。递归与循环混用逻辑矛盾
你同时使用了while循环和递归,逻辑完全混乱:循环已经在不断更新num的值,递归调用却没有接收返回结果,最终还是依赖循环的num值返回,完全浪费了递归逻辑。
修复方案
你可以选择两种方式修复:
方案一:纯递归实现
去掉while循环,用递归逻辑处理:
class Solution: def addDigits(self, num: int) -> int: if num < 10: return num # 计算各位和后递归调用 return self.addDigits(sum(int(i) for i in str(num)))
方案二:纯循环实现(无需递归)
保留循环,去掉递归调用:
class Solution: def addDigits(self, num: int) -> int: while num >= 10: num = sum(int(i) for i in str(num)) return num
另外,还有数学优化方案(数字根公式),无需循环或递归直接计算结果:
class Solution: def addDigits(self, num: int) -> int: if num == 0: return 0 return 9 if num % 9 == 0 else num % 9
这个方法利用数字根性质:一个数的数字根等于它对9取余的结果,当数是9的倍数且不为0时,数字根为9。
内容的提问来源于stack exchange,提问作者Steeltroops
相关产品推荐
相关产品推荐

