【问题标题】:java - recursion code explanation (check if ascending)java - 递归代码解释(检查是否升序)
【发布时间】:2017-01-29 09:58:43
【问题描述】:

我最近完成了一个程序,用于检查用户输入的 int 数组是否按升序排列。我的函数 isAsc 在这里:

public static boolean isAsc(int[] arr, int index){
    if (index==1 || arr.length==1){
        return true; //Base case
    }
    else if (arr[index-2] >= arr[index-1]){
        return false; 
    }
    else
        return isAsc(arr, index-1); //recursive step
}

而且逻辑似乎是正确的。但是,我没有得到的是当我调用函数时:System.out.print(isAsc(arr, arrayLength-1));

输出错误。这个System.out.print(isAsc(arr, arrayLength)); 得出正确答案。为什么?谢谢!

【问题讨论】:

  • 你看到的输出是什么?你用的是什么数组?
  • 当有重复的数字时,您的逻辑会返回 false,即使它们被正确排序(相邻)。将>= 更改为>
  • @Malvolio 1 2 4 3 它返回真。无论如何,我现在明白了,谢谢
  • @Bohemian,是的,我做到了。
  • @PaulStevenFantonalgoNadera -- 你的错误很常见,它有its own Wikipedia page

标签: java arrays recursion


【解决方案1】:

如果你调用方法

isAsc(arr, arr.length-1)

您的方法从不检查 if (arr[index-2] >= arr[index-1]) 检查中数组的最后一个元素,因此输出可能不正确。

另一方面,当你调用它时

isAsc(arr, arr.length)

你的方法的第一次执行检查if (arr[index-2] >= arr[index-1]),或者换句话说if (arr[arr.length-2] >= arr[arr.length-1])(假设你的数组有多个元素),所以arr[arr.length-1]不会被跳过。

【讨论】:

  • 哦,我现在明白了。我必须用笔和纸写下所有内容才能理解,哈哈。非常感谢!
  • 我应该使用 index-1 >= index 代替大声笑我习惯于声明 arr.length-1。再次感谢
猜你喜欢
  • 2021-04-15
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多