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

C++递归实现数组元素查找程序无输出问题求助

问题分析与修复

你的代码出现输入后直接退出、无预期输出的原因是递归调用时使用i++导致无限递归,最终触发栈溢出使程序崩溃。

问题点详解

在check函数的递归分支中:

return check(arr, n, x, i++);

i++是后置自增运算符,它会先将当前的i值传递给递归函数,之后才对i执行加1操作。这意味着每次递归调用传入的i始终是初始值0,永远无法触发终止条件i == n - 1,最终栈内存被耗尽,程序直接崩溃,自然不会输出任何结果。

修复方案

将i++替换为i + 1(更安全,不会修改原变量,符合递归无副作用的设计原则),或者++i(前置自增,先加1再传递值)。

修改后的完整代码

#include <bits/stdc++.h>
using namespace std;

int check(int *arr, int n, int x, int i)
{
    if (arr[i] == x)
    {
        return 1;
    }
    else if (i == n - 1)
    {
        return 0;
    }
    else
    {
        return check(arr, n, x, i + 1);
    }
}

int main()
{
    int arr[8] = {4, 12, 54, 14, 3, 8, 6, 1};
    int x;
    cout << "Enter target value: ";
    cin >> x;
    if (check(arr, 8, x, 0) == 0)
    {
        cout << "No";
    }
    else
    {
        cout << "Yes";
    }
    return 0;
}

额外优化建议

  • 可以在check函数开头添加边界检查,比如判断i >= n时直接返回0,避免数组越界风险。
  • 递归实现简单查找的效率不如迭代,但如果是练习递归逻辑,修复后的代码已能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:52:47