如何在具有多个调用的递归函数中使局部变量一致地增加?

时间:2016-09-22 06:46:14

标签: java recursion

在这段代码中,每当控件触及基本情况时,我都使用了一个全局变量来增加p的值。但我想在不使用全局变量的情况下这样做。这可能吗?

public class stairCase {
static int p=0;
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int n = func(14,0);
    System.out.println(n);
}
public static int func(int n, int c){
    if(n==c){
        p++;
        return 1;
    }
    if(n-c>=1){
        func(n,c+1);
    }
    if(n-c>=2){
        func(n,c+2);
    }

    if(n-c>=3){
        func(n,c+3);
    }
    return p;
}}

1 个答案:

答案 0 :(得分:0)

您的问题是您丢弃了一个主要的通信资源:返回值。你在三个地方重复,但忽略了价值。利用这一点,你就可以解决你的问题。

考虑这样的事情:

if (n < c) return 0         // Jumping too far gives no solution
else if (n == c) return 1   // Jumping to the top step is 1 solution
else
    return func(n, c+1) +   // Other jumps: sum the solutions from
           func(n, c+2) +   //   each of the reachable steps.
           func(n, c+3)

对于将来的编程,了解有用的变量名称和文档。如果我昨天没有在另一个帖子中解决这个问题,我就不会这么理解。

如果您逆转计数,您可以更好地解决此问题。请注意,您再也不会更改 n - 在这种情况下,为什么要传递它?在14开始 c 并计入步骤0(顶部)。

转换代码留给学生练习。 : - )