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

递归求数组最大值遇数组越界异常且未识别首元素问题

解决递归查找数组最大值的越界与元素遗漏问题

嘿,我来帮你排查下代码里的问题!你的递归思路是对的,但没注意Java数组的0-based索引规则,导致了两个关键问题:

问题分析

  • 数组越界异常:Java数组的索引从0开始,你定义的数组A有8个元素,有效索引范围是0~7。但你调用maximumR(A,8)时,递归过程中会尝试访问A[8],这超出了数组的有效范围,直接触发ArrayIndexOutOfBoundsException。
  • 无法识别第一个元素:当递归终止条件n==1时,你返回的是A[1](数组第二个元素),而数组的第一个元素是A[0],这就导致第一个元素90完全没被纳入最大值比较的范围。

修正后的代码

public class MaximumRec {
    public static void main(String[] args) {
        int[] A = {90, 45,12,19,72,55,15,19};
        // 传入数组最后一个元素的索引(7),而不是数组长度(8)
        int x = maximumR(A, A.length - 1);
        System.out.print(x);
    }

    static int maximumR(int[] A, int n) {
        int max;
        // 终止条件改为n==0,返回数组第一个元素A[0]
        if (n == 0) {
            return A[n];
        } else {
            max = maximumR(A, n-1);
            // 比较当前元素A[n]和前n个元素的最大值
            if(max < A[n] ) {
                max = A[n];
            }
        }
        return max;
    }
}

逻辑说明

修正后的递归逻辑是这样的:

  • 每次递归调用处理到索引为n的元素,先递归查找0~n-1范围内的最大值
  • 把这个最大值和当前元素A[n]比较,取较大的那个作为0~n范围的最大值
  • 当n==0时,直接返回第一个元素A[0],作为递归的终止条件

这样既避免了数组越界,也能正确把第一个元素纳入最大值的比较范围,运行后会输出正确的最大值90。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:03:05