在子序列中寻找最大值的错误

问题描述 投票:0回答:0
public class Ques1{
    public static int func(int i, int j, int ans, int[] arr){
        if(j == arr.length-1){
            return Math.max(ans,arr[j]);
        }
        if(i == arr.length-1){
            return Math.max(ans,arr[i]);
        }
        int maxi = Math.max(ans,Math.max(arr[i],arr[j]));
        System.out.println(maxi);
        return func(i, j+1, maxi, arr);
    }
    public static void main(String[] args) {
        int[] arr = {12,10,2,4,6,1,9,28};
        int n = arr.length;
        for(int i = 1; i < n-1; i++){
            int ans = func(i-1, i, Integer.MIN_VALUE, arr);
        }
    }
}

在数组中的两个索引 i 和 j 之间找到子序列中的最大值时,最初在主函数和定义的函数“func”中 i=1,i=0 和 j=1 并继续,答案直到最后一步都是正确的,其中j的值是数组的长度-1。我试过调试,我面临的问题是当j的值增加到7时,数组的长度是8,因此,不是第一个“if”块继续执行,而是 j 的值递减回 0,最后一个 return 块执行,然后函数退出循环,i 从 i=2 开始。答案应该是 12, 12, 12, 12, 12, 12, 28,但最后的答案也是 12 而不是 28。

我面临的问题是当 j 的值增加到 7 时,数组的长度为 8,所以不是第一个“if”块继续,而是 j 的值递减回 0,最后一个 return 块执行,然后函数退出循环,i从i=2开始。答案应该是 12, 12, 12, 12, 12, 12, 28,但最后的答案也是 12 而不是 28。

arrays recursion max dynamic-programming subsequence
© www.soinside.com 2019 - 2024. All rights reserved.