【问题标题】:Recursive boolean if an array is ordered如果数组是有序的,则递归布尔值
【发布时间】:2020-08-02 03:53:45
【问题描述】:

我的任务是使用递归布尔方法来找出我给该方法的具有索引的数组是否以向上计数的方式排序。 我解决了非递归任务,但我现在卡住了,因为 IDK 如何创建一个递归方法,每次都必须给出一个数组......这是我的想法

public static boolean isSortedRecursive(int[] a) {

    int k=a.length-1;
    int z=a[k];
    int v=a[k-1];

    if(z>v){

        return false;
    }

    else if(z<a.length){
        k--;
        isSortedRecursive(a);
        return true;


    }


    isSortedRecursive(a);
    //return false;

}

【问题讨论】:

  • 如果解决方案有帮助,请告诉我。对于递归,首先尝试用简单的英语单词提出一个递归公式。然后,编写公式和代码。

标签: java arrays recursion


【解决方案1】:

这是一个相当简单的答案。尝试了解发生了什么。

递归地说,如果数组直到i - 1array[i - 1] &lt;= array[i] 被排序,则直到索引i 的数组按升序排序。

public static boolean isArraySorted(int[] a, int i) {  

   if (a.length == 0 || i == 0) {
       return true; // Empty array or we're at the first element of the array.
   }

   return a[i - 1] <= a[i] && isArraySorted(a, i - 1);
}

// Test code
int[] a = new int[]{1, 2, 3, 4, 5, 5, 6};

isArraySorted(a, a.length - 1);  

坦率地说,为此使用递归代码是多余的,因为它需要O(N) 空间和时间。我了解您的课程讲师会打算通过递归让您的“脚湿”。但是,这并不是递归的最佳用途。

【讨论】:

    【解决方案2】:

    通过再添加一个参数(数组大小),您可以使其相当简单,如下所示:

    public class Main {
        public static void main(String args[]) {
            // Tests
            System.out.println(isSortedRecursive(new int[] { 2, 3, 1, 4, 7, 5, 6 }, 7));
            System.out.println(isSortedRecursive(new int[] { 6, 1, 3, 5, 7, 4, 2 }, 7));
            System.out.println(isSortedRecursive(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 7));
        }
    
        public static boolean isSortedRecursive(int[] a, int size) {
            if (a[size - 1] < a[size - 2]) {
                return false;
            }
            if (size > 2) {
                return isSortedRecursive(a, size - 1);
            }
            return true;
        }
    }
    

    输出:

    false
    false
    true
    

    注意:它只会为按升序排序的数组返回true

    【讨论】:

      猜你喜欢
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多