Java 递归-检查数组是否在增加
我正在尝试创建一个方法来检查数组中元素的递归递增<如果所有元素按递增顺序排列,则应返回code>True。当我比较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;
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)
,这比只跟踪当前要比较的索引要复杂得多。在将迭代任务作为递归函数编写时,我们真的在谈论复杂性吗?:-)