Java 递归-检查数组是否在增加

Java 递归-检查数组是否在增加,java,arrays,sorting,recursion,indexoutofboundsexception,Java,Arrays,Sorting,Recursion,Indexoutofboundsexception,我正在尝试创建一个方法来检查数组中元素的递归递增True。当我比较arr[I+1]时,我得到一个IndexOutOfBoundsException。我有什么想法可以让它工作吗 public static boolean isAscending(int[] array) { int n = array.length - 1; if(array.length == 0 || array.length == 1 || n == 1) return true;

我正在尝试创建一个方法来检查数组中元素的递归递增<如果所有元素按递增顺序排列,则应返回code>True。当我比较
arr[I+1]
时,我得到一个
IndexOutOfBoundsException
。我有什么想法可以让它工作吗

public static boolean isAscending(int[] array) {
    int n = array.length - 1;
    if(array.length == 0 || array.length == 1 || n == 1) 
        return true;
    else if (array[n] <= array[n-1]){  
        return false;
    }

    if isAscending(array);
        return true;
}
公共静态布尔isAscending(int[]数组){
int n=array.length-1;
if(array.length==0 | | array.length==1 | | n==1)
返回true;

否则如果(数组[n]除了我没有看到任何
arr[I+1]
,您必须减小递归调用的数组的大小(并在最后一个
if
之后删除
),否则您将使用相同的输入反复调用该方法。

您需要跟踪当前正在查看的索引。现在您总是在查看数组中的最后一个索引。此外,您当前不检查前两个索引是否按升序排列,因为当前在
n==1
notn==0

public static boolean isAscending( int[] array ){ return isAscendingHelper( array, array.length - 1 ); }

private static boolean isAscendingHelper( int[] array, int index )
{
    if( index <= 0 )
       return true;
    else if( array[index] <= array[index-1] )
       return false;
    else
       return isAscendingHelper( array, index - 1 );
}
public静态布尔isAscending(int[]数组){return isAscendingHelper(array,array.length-1);}
私有静态布尔isAscendingHelper(int[]数组,int索引)
{

如果(索引如果您需要保留原始方法签名:

public static boolean isAscending(int[] array) {
  if (array.length == 0 || array.length == 1) {
    return true;
  }
  int[] temp = Arrays.copyOfRange(array, 1, array.length);
  if (array[0] < temp[0]) {
    return isAscending(temp);
  }
  return false;
}
公共静态布尔isAscending(int[]数组){
if(array.length==0 | | array.length==1){
返回true;
}
int[]temp=array.copyOfRange(array,1,array.length);
if(数组[0]
如果正在搜索(数组);
不会编译。有些代码丢失了吗?@MAV:我已经做了一段时间的纯Java,但是为什么不直接返回递归调用的结果呢?每次调用它时,它都会做完全相同的事情。在if语句后面有一个;。这肯定不对。如果array[n]>array[n-1],你的方法永远不会结束n大于1。@ChristopherPoile这不是我的递归调用。;)我询问OP是否缺少某些代码的原因是他得到了一个运行时异常(并提到代码中不存在的
arr[I+1]
),因此OPs本地代码和发布的代码之间一定不匹配。我希望您不是建议在进行下一个递归调用之前创建并复制到新数组。即
O(n^2)
,这比只跟踪当前要比较的索引要复杂得多。在将迭代任务作为递归函数编写时,我们真的在谈论复杂性吗?:-)