2016-04-03 10 views
0

私はこの基本的な階乗計算をJavaで行っていますが、私はこの問題を練習に合わせて修正するのに苦労しています。それは言う:要因の メソッドを変更して、ローカル変数と再帰呼び出しパラメータを出力します。再帰呼び出しごとに、出力を別の行に表示し、インデントのレベルを追加します。私はImがprintステートメントがどこに行かなければならないのか理解するのが難しいと思う。ローカル変数= numberと再帰呼び出しパラメータ= number-1も同様です。ここまでは私のコードです。階乗再帰「Javaで可視化されました」

public class Factorial { 
    private static String s1=""; 
    public static long factorial(long number,long save) { 


    if (number <= 1) { //test for base case 
     System.out.printf("%s%d! = %d*%d!= ",s1,save,save,save-1); 
     s1 = s1 +" "; 
     return 1; 
    } 
    else{ //recursion step 
     return number * factorial(number - 1,save); 
    } 
} 

//output factorial for values 0-21 
public static void main(String[] args) { 
    //calculate factorials 0-21 
      for (int counter = 0; counter <= 21; counter++){ 
       long x = factorial(counter,counter); 
     System.out.printf("%d%n",x); 
    } 
} 

} 
+0

おそらく、この質問に役立つものは、予想される出力がどのようになるべきかを書いていることでしょう。 – dwjohnston

+0

はい私は正しい出力を今は持っていますが、フォーマットに問題があります。各行がインデントされるべきときに、1つの行に出てきます。私はフォーマットヘルパーを読んだが、私はそれを理解することはできない。それはあなたが私を助けてくれるものですか? – Cake771

答えて

1

私はImはprint文は行くべきトラブルの理解を持つと思います。

はい、あなたが見ることができるように、運動状態

そのローカル変数と再帰呼び出しパラメータを印刷する階乗メソッドを変更します。

したがって、mainの代わりにfactorialを変更してください。このようにして、毎回factorialが呼び出されると、エクササイズが尋ねるように、新しい行が出力されます。

+0

私のコードを編集しました。私はほとんどそこにいると信じています。私の唯一の問題は、 "基本ケース"または数字== 0のときです。正しい出力が得られません。私はそのケースのifステートメントを具体的に作成する必要があると思っていますか?私はそれを試してみる。 – Cake771

+0

@ Cake771私は、あなたが2つの基本的なケース(0と1)を得て、それが単一であるかのように話しているという事実から問題が生じると言います。 1のときに '1 *階乗(0)'を返すと、期待される出力が得られます。したがって、 '== 0'と' <= 1'ではなく1回だけチェックするだけで、問題を簡素化し、必要なものを与えることができます。 –