对于这个递归方法,我绘制了一个递归轨迹来确定 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/