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

时间:2014-02-24 20:14:06

标签: java arrays sorting recursion indexoutofboundsexception

我正在尝试创建一个方法来检查数组以递归方式增加元素。如果所有元素的递增顺序,则应返回True。我比较IndexOutOfBoundsException时得到arr[i+1]。关于如何使其发挥作用的任何想法。

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

3 个答案:

答案 0 :(得分:0)

除此之外我没有看到任何arr[i+1],你必须减少你递归调用的数组的大小(并删除最后;后的if),否则你会一遍又一遍地使用相同的输入调用方法。

答案 1 :(得分:0)

您需要跟踪您当前正在查看的索引。现在,您始终在查看数组中的最后一个索引。此外,您目前不检查前两个索引是否按升序排列,因为您当前n == 1而不是n == 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 );
}

答案 2 :(得分:0)

如果您需要维护原始方法签名:

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