将计算阶乘和的Python嵌套for循环转换为递归函数
递归实现阶乘累加求和
你的代码实际计算的是从a到b每个数n的「1!+2!+…+n!」的总和(因res += temp缩进在j循环内,每次阶乘计算的中间结果都会被累加)。以下是对应的递归实现:
优化版递归代码(尾递归减少重复计算)
def fact_sum(n, current_fact=1, total=0): # 尾递归计算1!到n!的累加和 if n == 0: return total current_fact *= n total += current_fact return fact_sum(n-1, current_fact, total) def recursion(a, b): # 递归累加a到b每个数的阶乘累加和 if a > b: return 0 return fact_sum(a) + recursion(a+1, b) # 输入与输出 a = int(input("请输入第一个整数:")) b = int(input("请输入第二个整数:")) res = recursion(a, b) print(f"范围{a}到{b}中每个整数的1到自身阶乘之和的总和为:{res}")
逻辑说明
fact_sum(n):通过尾递归高效计算1!到n!的累加和,用current_fact维护当前阶乘值,total维护累加结果,当n递减至0时返回总和。recursion(a,b):终止条件为a > b(返回0),否则计算当前a的阶乘累加和,再加上recursion(a+1, b)的结果,实现从a到b的逐个累加。
补充:若你实际想计算「a到b每个数的阶乘之和」(即a! + (a+1)! + … + b!)
原代码的缩进存在错误(res += temp应放在j循环外),对应的递归实现如下:
def fact(n): # 递归计算单个数字的阶乘 if n == 1 or n == 0: return 1 return n * fact(n-1) def recursion(a, b): # 递归累加a到b的阶乘 if a > b: return 0 return fact(a) + recursion(a+1, b) # 输入与输出 a = int(input("请输入第一个整数:")) b = int(input("请输入第二个整数:")) res = recursion(a, b) print(f"范围{a}到{b}中每个整数的阶乘之和为:{res}")
内容的提问来源于stack exchange,提问作者Vincent Wambua
相关产品推荐
相关产品推荐

