用不同的值调用的递归函数

时间:2014-09-22 03:31:41

标签: java recursion

我有一个像这样的递归函数:

public static int h(int n) {
    if (n == 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    } else {
        //variable value is a fixed one.
        i = value % 2;
        return h(n - h(i) - 1) + h(n - 2);
    }
}

假设此时变量value的值是偶数。然后如果我用h(12)调用该函数,我想知道函数是如何工作的?

在这种情况下,我想要发生的是评估
h(12)=h[12-h(0)-1]+h(10)
=h(11)+h(10) ={h(11-h(0)-1)+h(9)}+{h(10-h(0)-1)+h(8)} ={h(10)+h(9)}+{h(9)+h(8)}

在评估h(11)+h(10)时,函数首先完成h(11)并在开始使用h(n-2)之前获取该值,这是h(10)

如果它首先完成h(11),那么最后它必须达到n == 0或n == 1 case.Then到达时不会h(n-2)成为h(-2) }或h(-1)
如何将初始函数调用值存储为12,当它到达h(n-2)时调用h(10),然后使该部分计算为h(8),h(6)..

1 个答案:

答案 0 :(得分:2)

每个函数调用都存储自己的参数副本。因此,在第一次通话(h(11))中,致电n不会更改h(12)

Java中的表达式从左到右进行评估。这意味着调用h(11)将在h(10)调用h(12)之前完成。但是,在这种情况下,这并不重要,因为结果将是相同的。