当前位置: 首页 > 知识库问答 >
问题:

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

云默
2023-03-14

这是一个问题:如果数组的每个元素小于或等于下一个元素,数组将被排序(按升序)。

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

在显示代码之前:我的逻辑是if-else if and-else语句应该首先确定数组的大小是0、1还是2。这是因为当大小等于1或2时,程序必须中断。当大小大于2时,程序应检查arr[size-1]

我知道循环更好我只是想研究递归

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; 

         }

    }

}

共有2个答案

贝阳泽
2023-03-14

需要从isSorted返回结果,例如,更改:

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

return isSorted(arr, size-1); 

并且,如果(size==2)是冗余的,则案例else<代码>大小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);
        }
    }
}

卫华奥
2023-03-14

递归不是解决这个问题的好方法。如果你的数组非常大,你可以得到StackOverflow Error。为什么不使用简单的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;
}
 类似资料:
  • 在PHP中,检查数组是否为递归数组的最佳方法是什么? 给定以下代码: 从PHP手册: print\u r()在到达数组的第三个元素时将显示递归。 似乎没有其他方法可以扫描数组中的递归引用,因此如果需要检查它们,则必须使用print\u r()及其第二个参数来捕获输出并查找单词RECURSION。 还有更优雅的检查方式吗? 附:这就是我如何使用regex和print\u r()检查和获取递归数组键的

  • 需要检查整数的位数是否与递归偶数。 这里没有递归: 这是使用递归计数数字的代码 但是如何制作一个递归方法,该方法将整数作为参数并返回 true(如果位数为偶数)的 false? 我这样做了,但不确定是否正确: 有什么建议/提示吗?

  • 我试图解决树中的一个问题,我们必须检查完整路径(从根到叶)是否会导致求和值(由用户给出)。我成功地做到了这一点,下面是代码 我理解代码的主要问题是,当我们向下移动的递归函数时,总和会发生变化,当总和在语句。我们希望在第二个函数中传递的总和值是那个给定点的值(由于总和通过第一个函数传递,应该会改变),但是这段代码似乎仍然正常工作。

  • 问题内容: 我想扩展Array类,以便它可以知道它是否已排序(升序)。我想添加一个称为的计算属性。如何声明数组的元素具有可比性? 我目前在Playground中的实现 错误 当然,我仍然遇到错误,因为Swift不知道如何比较元素。如何在Swift中实现此扩展?还是我在这里做错了什么? 问题答案: 自由函数的替代解决方案是执行Swift的内置函数和方法,并要求您将合适的比较器传递给该方法:

  • 以下代码的输出是:请输入您的单词: 你好, 凯沙夫, 鲍勃, doan kehsavbob 线程中的异常 “主要” java.lang.数字格式异常: 对于输入字符串: “kehsavbob” 在 java.base/java.lang.数字格式异常.为输入字符串 (数字格式例外.java:67) 在 java.base/java.lang.Integer.parseInt(整数.java:668

  • 这是第一个数组。 用户可以输入不超过100个整数,如果用户输入负数,将停止。 这是第二个数组。 用户可以输入不超过100个整数,如果用户输入负数将结束。 打印出第一个整数列表 rint出第二个整数列表 问题在于,它不会检查数组是否按升序排列。↓↓↓ 如果inOder=1,我需要合并这两个数组。