Recursion 使用递归查找数组中的最大值

Recursion 使用递归查找数组中的最大值,recursion,int,max,Recursion,Int,Max,这是我的测试阵列 int [] A = {1,2,7,3,5,6}; 这就是方法 public static int largest(int [] A) { int temp = A[0]; return largestRec(A, 0, A.length - 1, temp); } // WRITE THIS METHOD that returns the largest of the elements in A // that are indexed from low to hi

这是我的测试阵列

int [] A = {1,2,7,3,5,6};
这就是方法

public static int largest(int [] A)
{
  int temp = A[0];
  return largestRec(A, 0, A.length - 1, temp);
}

// WRITE THIS METHOD that returns the largest of the elements in A
// that are indexed from low to high.  RECURSIVELY!
private static int largestRec(int [] A, int low, int high, int temp)
{  
  if (low == high)
    return A[low];

  if (low <= A.length){
    if (A[low] > temp){
      temp = A[low];
    }  
    largestRec(A, low+1, high, temp);      
  }   
  return temp
}
公共静态int最大值(int[]A)
{
int temp=A[0];
返回最大值(A,0,A.长度-1,温度);
}
//编写此方法,该方法返回数组中最大的元素
//索引从低到高。递归地!
专用静态最大整数(整数[]A、整数低、整数高、整数温度)
{  
如果(低==高)
返回一个[低];
如果(低温){
温度=A[低];
}  
最大温度(A,低+1,高,温度);
}   
返回温度
}

为什么tem会重置并返回
A[0]
,即
1

问题在于,您没有对
largestRec
递归调用的返回值进行任何操作。请记住,参数是按值传递的(即使在对同一函数的递归调用中也是如此),因此在函数内部更改参数不会影响外部

我认为您根本不应该将
temp
作为参数传递

private static int largestRec(int [] A, int low, int high )
{ 
  int temp; 
  if (low == high)
    temp = A[low];
  else
  {
    temp = largetstRec( A, low+1, high );
    if (A[low] > temp){
      temp = A[low];
    }  
  }
  return temp;   
}
这使函数保持
temp
本地(我认为这可能是您首先调用它的意思)。

私有静态int-largestRec(int[]A,int-low,int-high){
var最大=A[低];
如果(低==高)
返回最大;//或[high],因为两者相同
对于(变量i=低;i<高;i++){
if(最大值
这需要是一个递归方法,因此不允许循环
private static int largestRec(int [] A, int low, int high){  
  var largest = A[low];

  if(low == high)
     return largest;  // or  A[high] because both are same

  for(var i = low; i < high; i++){
    if(largest < A[i])
      largest = A[i];
  } 

  return largest;
}