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

将计算阶乘和的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:15:43