如何修改递归函数实现数字各位乘积迭代计算直至结果为一位数
问题原因
你当前的代码仅实现了单次计算输入数字各位的乘积,没有补充「乘积结果大于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
相关产品推荐
相关产品推荐

