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

如何修改递归函数实现数字各位乘积迭代计算直至结果为一位数

问题原因

你当前的代码仅实现了单次计算输入数字各位的乘积,没有补充「乘积结果大于1位时重复计算」的递归逻辑,同时用全局变量存储乘积、递归终止条件返回布尔值的写法也存在逻辑隐患,布尔值参与数值运算时会被隐式转换为1,虽然单次计算刚好能得到正确结果,但逻辑并不严谨。

可直接运行的修改后代码

def digital_product(num):
    # 递归终止条件:当前数为一位数时直接返回
    if num < 10:
        return num
    # 计算当前数所有位的乘积
    product = 1
    for digit in str(num):
        product *= int(digit)
    # 对乘积递归调用函数,直到得到一位数结果
    return digital_product(product)

# 输入调用
input_num = int(input())
print(digital_product(input_num))

逻辑说明

  • 去掉了全局变量,每次计算乘积使用临时变量,避免多次调用函数时数据互相干扰
  • 第一层递归先判断当前数值是否为个位数,是则直接返回作为最终结果
  • 若不是个位数,先计算所有位的乘积,再将乘积作为参数传入函数递归处理,直到拿到一位数的返回值

如果你想保留原来按索引遍历字符串的递归写法,可以调整为如下结构:

# 单次计算数字各位乘积的递归函数
def calc_single_product(num_str, index):
    if index == len(num_str):
        return 1
    return int(num_str[index]) * calc_single_product(num_str, index + 1)

# 外层递归控制重复计算直到得到一位数
def func_(num):
    if num < 10:
        return num
    current_prd = calc_single_product(str(num), 0)
    return func_(current_prd)

# 调用测试
num = int(input())
print(func_(num))

测试验证:输入5555时,计算逻辑为5555=625 → 625=60 →60=0,最终返回0,符合需求。


内容的提问来源于stack exchange,提问作者Code_AS06

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:03