2016-09-22 36 views
-2

在这段代码中,我使用了一个全局变量来增加每当控件触及基本情况时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

'return func(n,c + x);' – SomeJavaGuy

回答

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(最高)。

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

相关问题