Java 在检查数组是否使用递归排序时遇到问题

Java 在检查数组是否使用递归排序时遇到问题,java,algorithm,sorting,recursion,Java,Algorithm,Sorting,Recursion,这就是问题所在:如果数组的每个元素小于或等于下一个元素,那么数组将按升序排序 编写一个名为isSorted的布尔值方法,该方法接受整数数组和数组中的元素数,并返回数组是否已排序 在显示代码之前:我的逻辑是if-else if and-else语句应该首先确定数组的大小是0、1还是2。这是因为当大小等于1或2时,程序必须中断。当大小大于2时,程序应检查arr[size-1]>arr[size-2],然后再次调用该方法,如果为真,则使用大小递减;如果为假,则仅返回false。当我运行该程序时,以下两

这就是问题所在:如果数组的每个元素小于或等于下一个元素,那么数组将按升序排序

编写一个名为isSorted的布尔值方法,该方法接受整数数组和数组中的元素数,并返回数组是否已排序

在显示代码之前:我的逻辑是if-else if and-else语句应该首先确定数组的大小是0、1还是2。这是因为当大小等于1或2时,程序必须中断。当大小大于2时,程序应检查arr[size-1]>arr[size-2],然后再次调用该方法,如果为真,则使用大小递减;如果为假,则仅返回false。当我运行该程序时,以下两个测试失败:[1,3,2,4]和[2,1,2,3,4]。因此,我指定当大小等于2时,如果arr[0]>arr[1],则该方法返回false,但它不起作用。我做错了什么?我不想只是查找答案,因为我正在准备考试,所以如果有重复的答案,我很抱歉

我知道循环更好我只是想学习递归

public boolean isSorted(int[] arr, int size) { 


    if(size == 0 || size == 1) { 

         return true; 

    } else if (size == 2) { //this is the part I don't get. 

        if (arr[0] > arr[1]) { 

            return false; 

        } else { 

             isSorted(arr,size-1); 
             return true;   

        }


    } else {

         if (arr[size-1] < arr[size-2]) { 

             return false;  

         } else { 

            isSorted(arr, size-1); 
            return true; 

         }

    }

}

您需要从isSorted返回结果,例如,change:

isSorted(arr, size-1); 
return true; 

另外,如果size==2,则情况是多余的。尺寸2应具有与尺寸3、4、5等相同的逻辑

完整代码:

public boolean isSorted(int[] arr, int size) {
    if (size == 0 || size == 1) {
        return true;
    } else {
        if (arr[size - 1] < arr[size - 2]) {
            return false;
        } else {
            return isSorted(arr, size - 1);
        }
    }
}

您需要从isSorted返回结果,例如,change:

isSorted(arr, size-1); 
return true; 

另外,如果size==2,则情况是多余的。尺寸2应具有与尺寸3、4、5等相同的逻辑

完整代码:

public boolean isSorted(int[] arr, int size) {
    if (size == 0 || size == 1) {
        return true;
    } else {
        if (arr[size - 1] < arr[size - 2]) {
            return false;
        } else {
            return isSorted(arr, size - 1);
        }
    }
}

递归不是解决这个问题的好方法。如果您的阵列非常大,您可能会得到StackOverflower错误,该怎么办。为什么不使用简单if运算符:

public static boolean isSorted(int[] arr, int size) {
    if (arr.length >= 2)
        for (int i = 1; i < arr.length; i++)
            if (arr[i - 1] > arr[i])
                return false;

    return true;
}

递归不是解决这个问题的好方法。如果您的阵列非常大,您可能会得到StackOverflower错误,该怎么办。为什么不使用简单if运算符:

public static boolean isSorted(int[] arr, int size) {
    if (arr.length >= 2)
        for (int i = 1; i < arr.length; i++)
            if (arr[i - 1] > arr[i])
                return false;

    return true;
}

谢谢你,你能解释一下为什么当尺寸等于2时,我们必须有一个单独的else if语句吗?@人不,这是多余的。当大小为2时,它具有与大小3、4、5相同的逻辑,…似乎大小==0条件是冗余的well@Maxim这是一个小案子。当原始数组的长度为0时。@可能需要学习如何使用调试器。这很有帮助。您可以使用Eclipse、IntelliJ IDEA等IDE进行调试。谢谢,您能解释一下,当大小等于2时,为什么我们必须使用单独的else if语句吗?@Person No,这是多余的。当大小为2时,它具有与大小3、4、5相同的逻辑,…似乎大小==0条件是冗余的well@Maxim这是一个小案子。当原始数组的长度为0时。@可能需要学习如何使用调试器。这很有帮助。您可以使用Eclipse、IntelliJ IDEA等IDE进行调试。发布的任务中没有限制您必须使用递归来解决任务。使用simple for loop实际上是更好的方法。在发布的任务中没有限制您必须使用递归来解决任务。使用简单for循环实际上是更好的方法