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

无需比较运算符的最大值递归函数返回递减值问题求助

问题分析与修正方案

你的代码核心问题是:每次递归调用都会重新定义TrueA和TrueB,这两个变量仅存储当前递归层级传入的A、B值,而非最初调用时的原始输入值。以WhoBig(9,2)为例:

  • 第一次递归:TrueA=9、TrueB=2,因A、B均不为0,调用WhoBig(8,1)
  • 第二次递归:TrueA=8、TrueB=1,继续调用WhoBig(7,0)
  • 第三次递归:触发B==0条件,返回当前层级的TrueA=7,而非原始输入的9,导致结果不符合预期。

修正方案1:用辅助函数传递初始值

新增辅助函数,将最初的A、B值作为参数传递,确保递归终止时能返回原始的较大值:

#include <stdio.h>

// 辅助函数:origA、origB保存首次调用的原始值
int WhoBigHelper(int A, int B, int origA, int origB) {
    if (A == 0) {
        return origB;
    } else if (B == 0) {
        return origA;
    } else {
        return WhoBigHelper(A - 1, B - 1, origA, origB);
    }
}

// 对外接口函数,封装初始值传递逻辑
int WhoBig(int A, int B) {
    return WhoBigHelper(A, B, A, B);
}

int main() {
    printf("%d", WhoBig(9, 2)); // 输出:9
    return 0;
}

修正方案2:无辅助函数的递归逻辑

利用递归返回值推导差值,直接计算原始较大值:

#include <stdio.h>

int WhoBig(int A, int B) {
    if (A == 0) {
        return B;
    } else if (B == 0) {
        return A;
    } else {
        // 每次递归返回差值,加1后还原为上一层级的相对差值,最终得到原始较大值
        return WhoBig(A - 1, B - 1) + 1;
    }
}

int main() {
    printf("%d", WhoBig(9, 2)); // 输出:9
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:20:28