Python递归函数persistence计算数字持久化结果不符问题排查
问题分析与修正方案
核心错误原因
- 函数职责混乱:原函数把「计算各位乘积」和「统计迭代次数」两个功能揉在一块,递归调用时返回的是迭代次数而非乘积结果,直接导致乘积计算错误。比如调用
persistence(99)时,函数返回的是迭代次数2,而非9×9的乘积81,所以9 * persistence(99)变成9×2=18,这就是你看到首次迭代得到18的根源。 - 初始条件错误:输入是个位数时,应该返回0(不需要任何迭代),但原函数返回了n本身,这会让递归调用时把个位数的值当成乘积的一部分,同时打乱迭代次数的统计逻辑。
- 乘积计算逻辑错误:用
result +=累加各位的乘积,这完全违背了“各位相乘”的要求,正确的做法应该是初始值设为1,然后逐个乘以各位数字。
修正后的代码
方案一:拆分辅助函数(逻辑更清晰)
def multiply_digits(n): product = 1 while n > 0: product *= n % 10 n = n // 10 return product def persistence(n): if n < 10: return 0 count = 0 current = n while current >= 10: current = multiply_digits(current) count += 1 return count print(persistence(999)) # 输出4,符合预期
方案二:单函数实现(更紧凑)
def persistence(n): count = 0 while n >= 10: product = 1 # 计算当前数字的各位乘积 while n > 0: product *= n % 10 n = n // 10 n = product count += 1 return count print(persistence(999)) # 输出4
验证计算流程
按照修正后的代码,999的计算流程完全符合你的预期:
- 999 → 9×9×9=729(计数+1,总次数1)
- 729 →7×2×9=126(计数+1,总次数2)
- 126 →1×2×6=12(计数+1,总次数3)
- 12 →1×2=2(计数+1,总次数4),此时2是个位数,返回4。
内容的提问来源于stack exchange,提问作者cydar2500
相关产品推荐
相关产品推荐

