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

C语言递归算法传引用参数方法及数组最大值递归传引用问题排查

C语言递归中的引用传递及数组最大值递归实现问题解答

首先得明确一点:C语言本身没有像C++那样的原生引用类型,我们平时说的“引用传递”,本质上是通过指针来实现的——把变量的内存地址传给函数,函数通过指针间接修改原变量的值。在递归场景下使用的话,逻辑和普通函数一致:只需要在递归函数的参数列表里声明指针类型,递归调用时传递同一个指针地址就行,这样每一层递归都能操作同一个内存位置的数据。

接下来看你遇到的递归找数组最大值的问题,按你说的改成引用传递(指针传结果)后没输出,大概率是这几个地方出了问题:

  • 没有正确初始化result或者在递归终止时给*result赋值初始值
  • 调用递归函数时没传result的地址(应该传&result而不是result)
  • 递归过程中没有正确更新*result的值
  • 主函数最后没打印result的值

我给你写了一份能正常运行的完整代码,你可以参考对比自己的代码:

#include <stdio.h>
#include <stdlib.h>

// 递归函数:通过指针result传递最终的最大值结果
void search(int a[], int tam, int current_idx, int *result) {
    // 递归终止条件:遍历到最后一个元素,先把它设为当前最大值
    if (current_idx == tam - 1) {
        *result = a[current_idx];
        return;
    }

    // 先递归处理后面的元素,找到后面部分的最大值
    search(a, tam, current_idx + 1, result);

    // 回溯时比较当前元素和已找到的最大值,更新结果
    if (a[current_idx] > *result) {
        *result = a[current_idx];
    }
}

int main() {
    int tam = 5;
    int array[5] = {3, 7, 2, 9, 5}; // 你可以换成自己的测试数组
    int result;

    // 调用递归函数,从索引0开始,传入result的地址
    search(array, tam, 0, &result);

    // 关键!一定要打印结果,不然你看不到输出
    printf("数组的最大值是:%d\n", result);

    return 0;
}

这里的关键点说明一下:

  1. 我把原来的max参数换成了current_idx来跟踪遍历位置,这样逻辑更清晰,避免初始max值设置错误的问题;
  2. 递归终止时先把最后一个元素赋值给*result,作为初始的最大值,然后回溯的时候依次和前面的元素比较更新;
  3. 调用search时必须传&result,这样函数才能修改主函数里的result变量;
  4. 主函数最后一定要用printf输出result,不然就算计算对了也看不到结果。

如果你的代码里还有其他细节问题,比如数组初始化错误、递归条件写错,可以对照上面的代码排查一下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:46:13