You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:52:35