我正在尝试了解递归。我想检查一个数组是否使用递归进行排序,但是我的代码存在一些问题,因为当index达到值2时,下一步应该是达到基本情况,但事实并非如此。这是我的代码,我做错了什么?
public class ArrayOrdered {
public static boolean isArrayInSortedOrder(int[] array, int index)
{
boolean b;
int a1;
int a2;
if(array.length == 1 || index == 1){//base case
b=true;
}else{
b=false;
a1 = array[index - 1];
a2 = array[index - 2];
if((a1 > a2)){//ordered
isArrayInSortedOrder(array, index - 1);
}
}
return b;
}
public static void main(String[] args) {
int index=20;
int[] array={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
boolean bool = isArrayInSortedOrder(array, index);
if(bool)
System.out.println("Array ordered");
if(!bool)
System.out.println("Array NO ordered");
}
}
答案 0 :(得分:1)
您正在调用isArrayInSortedOrder(array, index - 1)
,但忽略它的返回值。请考虑以下事项:
public static boolean isArrayInSortedOrder (int[] array, int index) {
if (array.length == 1 || index == 1) { //base case
return true;
}
int a1 = array[index - 1];
int a2 = array[index - 2];
if (a1 > a2) {
return isArrayInSortedOrder(array, index - 1);
}
return false;
}
答案 1 :(得分:1)
如果他们使代码更难阅读,我会尝试避免临时值。您还需要返回 recurse 的值(或者无法按照您想要的方式工作)。像
这样的东西public static boolean isArrayInSortedOrder(int[] array, int index) {
if (array == null || array.length < 2 || index < 2) {
return true;
}
if (array[index - 1] > array[index - 2]) {
return isArrayInSortedOrder(array, index - 1);
}
return false;
}
当您致电时,我更愿意使用array.length
(而不是使用index
对其进行硬编码)。
boolean bool = isArrayInSortedOrder(array, array.length);