java - 关于 boolean 递归的困惑

标签 java algorithm recursion

对于这个递归方法,我绘制了一个递归轨迹来确定 recTest(a,0,4) 会返回 true 还是 false。

public class Main {

    public static boolean recTest(int[] a, int i, int j){
        if(i>=j) return true;
        else if(a[i] > a[i+1]) return false;
        return recTest(a, i+1, j);

    }

    public static void main(String[] args) {

        int[] a = {3,6,8,7,9};
        System.out.println(Main.recTest(a,0,4));
        System.out.println(Main.recTest(a,1,4));
        System.out.println(Main.recTest(a,2,4));
        System.out.println(Main.recTest(a,3,4));
        System.out.println(Main.recTest(a,4,4));
    }

}

我得到了这个(当我手工完成时):

recTest(a,0,4) calls recTest(a,1,4)
recTest(a,1,4) calls recTest(a,2,4)
recTest(a,2,4) calls recTest(a,3,4)
recTest(a,3,4) calls recTest(a,4,4)
recTest(a,4,4) returns true [base case]

因此,我认为 recTest(a,0,4) 会类似地返回 true(因为“最低”递归会返回 true)。但事实并非如此。这是我绘制后收到的输出:

false
false
false
true
true

希望能解释一下这里到底发生了什么。

最佳答案

你的分析在这里:

recTest(a,2,4) calls recTest(a,3,4)

由于 a[2] 大于 a[3]recTest() 返回 false再次调用自己。

您可以使用调试器单步调试代码轻松发现这一点。

关于java - 关于 boolean 递归的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993335/

相关文章:

java - 在数组中查找模式

java - onConfigurationChanged() 未在方向更改时调用

algorithm - 从字符串中获取子字符串信息的最佳方法是什么

algorithm - 使用 LRS 数组增强的 factor oracle 查找多个字符串的最长公共(public)子串

java - 使用递归生成字符串中的所有字符子集,JAVA

python - Jinja2 "recursive"标签实际上是如何工作的?

java - 是否可以用Java开发一个evolution(邮件客户端)插件?

java - 如何在 JPanel 中放置文本区域

c - 数组中最小的两个整数和

ruby-on-rails - 数组在递归函数中的奇怪行为