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

HackerRank C++函数题运行时错误求助:四整数求最大值程序异常

四整数求最大值程序无限循环问题排查

我编写的四整数求最大值程序能得到预期结果,但输出会无限重复,必须手动终止程序,求助排查该运行时错误的原因。

代码如下:

#include <iostream>
#include <cstdio>
using namespace std;

int max_of_four(int a,int b,int c,int d){
    if (a>b){
        cout<<a;
    }else if(b>c){
        cout<<b;
    }else if(c>d){
        cout<<c;
    }else if(d>c){
        cout<<d;
    }
    return max_of_four( a,  b,  c,  d);
}

int main() {
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    
    return 0;
}

错误原因分析

  • 无限递归触发死循环:max_of_four函数最后一行的return max_of_four(a,b,c,d);是无终止的递归调用,每次执行到这里都会重新调用自身,永远不会结束递归流程,导致程序不断重复输出,直到手动终止或栈溢出。
  • 核心逻辑漏洞:函数本该返回最大值,但你在条件分支里直接用cout输出,完全没有返回值的逻辑;同时条件判断存在盲区,当出现数值相等的情况(比如a=b、c=d)时,不会进入任何输出分支,依然会触发递归。

修复方案

方案一:手动遍历找最大值

修改max_of_four函数,去掉递归,找到最大值后直接返回:

#include <iostream>
#include <cstdio>
using namespace std;

int max_of_four(int a, int b, int c, int d) {
    int max_val = a;
    if (b > max_val) max_val = b;
    if (c > max_val) max_val = c;
    if (d > max_val) max_val = d;
    return max_val;
}

int main() {
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    
    return 0;
}

方案二:利用标准库max函数

借助C++标准库的std::max简化逻辑(需要包含<algorithm>头文件):

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int max_of_four(int a, int b, int c, int d) {
    return max(max(a, b), max(c, d));
}

int main() {
    int a, b, c, d;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:35:20