2016-09-22 4 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

問題は、大きな通信リソースを捨てていることです。つまり、戻り値です。 3つの場所で再発しますが、その値は無視してください。それを利用すれば、あなたの問題を解決できます。将来のプログラミングのため

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を変更することは決してありません。その場合、なぜそれをまったく渡すのですか? cを14で開始し、ステップ0(上端)までカウントします。

コードの変換は、学生の練習として残されています。 :-)

関連する問題