在这段代码中,每当控件触及基本情况时,我都使用了一个全局变量来增加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;
}}
答案 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(顶部)。
转换代码留给学生练习。 : - )