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

时间:2018-01-02 20:47:32

标签: java arrays recursion

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

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

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));
} 

我虽然这样做是为了回归big-min:

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

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

3 个答案:

答案 0 :(得分: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));
  }

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

答案 1 :(得分:0)

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

答案 2 :(得分: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?

的更多信息