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
相关产品推荐
相关产品推荐

