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

编写求整型数组最值与和的递归函数时的初始化及逻辑疑问

问题解答

1. 为什么教授的代码不需要提前初始化三个指针指向的变量?

核心区别是你们的递归处理顺序完全不同:

  • 你的代码是前序处理逻辑:先判断当前元素、更新三个变量的值,再进入下一层递归,所以必须在调用函数前就给*min、*max、*sum赋初始值,否则第一次判断时读取的是内存野值。
  • 教授的代码是后序处理逻辑:先进入下一层递归,等递归返回后再处理当前元素,整个递归的第一次赋值操作就是终止条件里的赋值,这本身就是初始化步骤,完全不需要额外在函数外做初始化。

2. 终止条件的赋值会不会覆盖之前的计算结果?

不会,终止条件的赋值是整个计算流程的起点,此时还没有任何计算结果产生,不存在覆盖的问题。
我们以数组[3,1,2]为例,递归执行流程如下:

  1. 第一层传入数组[3,1,2],长度3≠1,直接调用下一层处理子数组[1,2]
  2. 第二层传入数组[1,2],长度2≠1,直接调用下一层处理子数组[2]
  3. 第三层传入数组[2],触发终止条件,赋值*min=*max=*sum=2,返回第二层
  4. 第二层处理当前元素1:*sum = 2+1=3,*min取1和2的最小值1,*max取1和2的最大值2,返回第一层
  5. 第一层处理当前元素3:*sum = 3+3=6,*min取1和3的最小值1,*max取2和3的最大值3,函数执行结束

可以看到,终止条件的赋值是所有计算的基础,后续回溯阶段都是在这个初始值的基础上做更新,完全不会覆盖有效结果。

补充:你的代码存在的问题

  • 你写的sum+=arr[0]是错误的:sum是指针变量,你修改的是指针本身的内存地址,而非指针指向的求和变量,应该改为*sum += arr[0]
  • 你的终止条件直接return,没有对三个变量做赋值,当输入数组长度为1时,返回的结果还是调用前的野值,逻辑不成立

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:48:03