【发布时间】:2016-01-25 13:03:14
【问题描述】:
对于这种递归方法,我绘制了一个递归跟踪来确定recTest(a,0,4) 将返回真还是假。
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
希望能解释一下这里到底发生了什么。
【问题讨论】:
-
问题被否决而没有解释为什么......?