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

递归函数add_mult_rec实现错误求助:计算结果与预期不符

问题排查与修正

错误原因分析

你的代码得到65的核心原因有两点:

  1. 操作符完全颠倒:
    你要求“当前数为奇数则加上下一个数的运算结果”,但原代码中奇数分支用了乘法(num * add_mult_rec(num-1));要求“当前数为偶数则乘以下一个数的运算结果”,原代码中偶数分支用了加法(num + add_mult_rec(num-1)),这直接导致运算逻辑反转。
  2. 递归结合顺序错误:
    原代码从num向1递归,运算结合顺序是右到左嵌套,比如调用add_mult_rec(5)时,实际执行的是:
    5 * (4 + (3 * (2 + 1))) = 5 * (4 + 9) = 5 *13 =65
    
    这和你预期的左到右、乘法优先的运算顺序(1 + (2*3) + (4*5))完全不符。

修正后的代码

要实现你预期的运算逻辑,我们可以调整递归的遍历方向和运算规则,先处理所有偶-奇对的乘法,再累加结果:

def add_mult_rec(num):
    # 基准情况:当遍历到超过num的位置时返回0
    def helper(current):
        if current > num:
            return 0
        if current % 2 == 1:
            # 奇数:直接加后续运算结果(后续先处理乘法)
            return current + helper(current + 1)
        else:
            # 偶数:乘下一个奇数,然后跳到下下一个位置
            return current * (current + 1) + helper(current + 2)
    
    return helper(1)

调用add_mult_rec(5)时,执行过程为:1 + (2*3) + (4*5) =1+6+20=27,完全符合你的预期。

另一种简洁递归写法

如果只针对奇数输入(比如你的案例中num=5),可以简化为:

def add_mult_rec(num):
    if num ==1:
        return 1
    # 奇数时,累加当前偶-奇对的乘积 + 左侧序列结果
    return (num-1)*num + add_mult_rec(num-2)

调用add_mult_rec(5)返回(4*5)+add_mult_rec(3)=20+(2*3)+add_mult_rec(1)=20+6+1=27,同样正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:40:29