Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归返回数组中的最大值减去最小值_Java_Arrays_Recursion - Fatal编程技术网

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

Java 递归返回数组中的最大值减去最小值,java,arrays,recursion,Java,Arrays,Recursion,我尝试编写递归程序,从数组返回最大值-最小值 所以我写了这个:(这个返回给我最大的值) 我想这样做是为了回报大敏: return Math.max (arr[index] ,SumOfBiggestMinusLowestValue(arr, index+1)) - Math.min(arr[index] ,SumOfBiggestMinusLowestValue(arr, index+1)) 但这不是工作,它给了我7而不是13,我错过了什么? 根据你们的经验,伙计们,如何递归思考 看起来是递

我尝试编写递归程序,从数组返回最大值-最小值

所以我写了这个:(这个返回给我最大的值)

我想这样做是为了回报大敏:

return Math.max (arr[index] ,SumOfBiggestMinusLowestValue(arr, index+1)) -  Math.min(arr[index] ,SumOfBiggestMinusLowestValue(arr, index+1))
但这不是工作,它给了我7而不是13,我错过了什么?
根据你们的经验,伙计们,如何递归思考

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

基本上,当递归时,您希望有变化的值,并在满足特定条件时让它返回最终结果

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

 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);
  }
函数将递归地找到各自的最大值和最小值

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

你可以阅读更多关于

的内容,正确答案不应该是13吗?(11-(-2))哦,是的。对不起,我醒了很多时间都没有睡觉。这个代码对我来说不会返回7;它返回11(最大值)——基本上是因为在这里,除了find
Math.max
之外,你什么都不做。也许你需要再做一次这样的事情,这次是为了找到最低的数字,然后减去两个结果。那么你建议怎么做,你能给我一个方向吗?我只知道如何获取数组的最大值/最小值,但不知道如何求最大值减去最小值的和。我建议创建两个单独的函数来获取数组中的最小值和最大值。然后计算
max-min
。迭代次数将是相同的,代码将更具可读性。嗨,issaac,首先感谢您的时间来帮助我。你能解释一下这句话吗?val?之前计算条件。如果条件计算结果为true,它将在<代码>?和<代码>:之间应用条件。如果条件的计算结果为false,则将在
之后应用该条件。这是一种为简单的事情做if-else的快速方法。比如代码
val
它将测试val是否小于min。如果小于min,它将使用val,否则它将使用min表示newMin
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));
  }
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);
}