递归返回最大值减去数组中的最小值

问题描述 投票:1回答:3

我尝试编写返回最大值的递归程序 - 数组中的最小值。

所以我写这个:(这给我最大的价值)

public static void main(String[] args) {
    int arr[] = {1 , 5 , 11, -2};
    System.out.println(SumOfBiggestMinusLowestValue(arr, 0));   
}
private static int SumOfBiggestMinusLowestValue(int[] arr, int index) {
    if (index == arr.length-1 )  {
        return arr[index];
    }
    return Math.max (arr[index] ,SumOfBiggestMinusLowestValue(arr, index+1));
} 

我这样做是为了回归大分:

return Math.max (arr[index] ,SumOfBiggestMinusLowestValue(arr, index+1)) -  Math.min(arr[index] ,SumOfBiggestMinusLowestValue(arr, index+1))

但它不起作用它给我7而不是13,我错过了什么?从你的经验家伙,如何递归思考?

java arrays recursion
3个回答
1
投票

基本上在递归时,您希望更改值并在满足特定条件时返回最终结果

我修改了你的代码,以便传入数组,然后是初始索引,并将最小值和最大值设置为数组中的第一个值。它将递归并检查数组中的下一个值是否大于或小于最小值和最大值并相应地进行设置。一旦索引等于数组的长度并返回最终结果,它将停止:

 public static void main(String[] args) {
    int arr[] = {1 , 5 , 11, -2};
    System.out.println(pow(arr, 0, arr[0], arr[0])); 
  }

  public static int pow(int[] arr, int index, int min, int max) {
    if (index == arr.length) {
      return max - min;
    }
    int val = arr[index];
    int newMin = val < min ? val : min;
    int newMax = val > max ? val : max;
    return pow(arr, index + 1, newMin, newMax);
  }

根据Taras Sheremeta建议的另一种方法是如下:

public static void main(String[] args) {
    int arr[] = {1 , 5 , 11, -2};
    System.out.println(largest(arr, 0) - smallest(arr, 0)); 
  }

  public static int smallest(int[] arr, int index) {
    if (index == arr.length - 1) {
      return arr[index];
    }
    return Math.min(arr[index], smallest(arr, index + 1));
  }

  public static int largest(int[] arr, int index) {
    if (index == arr.length - 1) {
      return arr[index];
    }
    return Math.max(arr[index], largest(arr, index + 1));
  }

函数将递归地找到它们各自的最大值和最小值。


0
投票

看起来像是递归中的一些逻辑错误。在pow方法函数中,Math.max(...)和Math.min(...)从数组中获取一个值作为第一个参数,而不是数组中的值作为第二个参数。 pow函数的结果不是数组中的值。


0
投票
public static void main(String[] args) {
    int arr[] = {1 , 5 , 11, -2};
    System.out.println(pow(arr, 0, arr[0], arr[0]));
}
private static int pow(int[] arr, int index, int max, int min) {
    if (index == arr.length)  {
        return max - min;
    }

    max = Math.max(max, arr[index]);
    min = Math.min(min, arr[index]);
    return pow(arr, index + 1, max, min);
}

您可以阅读更多关于How should you approach recursion? 的信息

© www.soinside.com 2019 - 2024. All rights reserved.