2017-04-06 13 views
3

複数の行を印刷するための再帰メソッドを使用するように割り当てられています。各行の前に3個分のスペースがあります。ここに希望の出力の画像があります(http://i.imgur.com/mek2QMz.png)。再帰メソッド付きのネストされたインデント付き出力

これはコードである私がこれまでしている:私はスペースを作る方法を知っている

public class Prog6d { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     int input = scan.nextInt(); 
     System.out.println(printFactorial(input)); 
    } 

    //Calculates the factorial 
    public static int printFactorial(int input) { 
     if (input == 1) { 
      return 1; 
     } 
     System.out.println("factorial(" + input + ")"); 
     System.out.print(" "); 
     return input*printFactorial(input-1); 
    } 
} 

が正しくforループ使用して表示されますが、私は再帰でこれを行う方法は考えています。

答えて

2

これは頻繁に行います。

  1. が空の文字列に初期化グローバル文字列変数インデントを行います。私は、関連する2つの基本的な方法を、持っています。関数の入力時に、3つのスペースを長くします。離れるときは、前の長さにしてください。
  2. パラメータを追加インデントを追加します。最初の呼び出しは空の文字列です。各再帰は3つのスペースを値に連結します。

いずれの場合も、最初にインデントを使用します。

これで問題が解決しますか?

+1

グローバル変数を避けると、プログラムのデバッグに苦労することがないので、アプローチ番号1よりもアプローチ2をお勧めします。あなたの呼び出しをtail-recursiveにする場合、パラメータ化されたバージョンも同様に効率的でなければなりません。 – Davislor

関連する問題