解答例 - j1.lesson09.PascalTriangle

package j1.lesson09;

import java.io.*;

/**
 * 課題0901 - 解答例.
 @author s.arakawa
 @version $Id: PascalTriangle_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
 */
public class PascalTriangle {

    /**
     * コンソールから全体の要素数と選び出す要素数を入力させ、その組み合わせの総数を表示するプログラム。
     * 組み合わせの総数の計算に再帰メソッド起動(呼び出し)を行うこと。
     @param args 無視される
     @throws IOException 入力時に例外が発生した場合
     */
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("全体の要素数を入力:");
        int n = Integer.parseInt(reader.readLine());
        System.out.print("選び出す要素数を入力:");
        int r = Integer.parseInt(reader.readLine());
        
        System.out.println(n + "から" + r + "を選び出す組み合わせは" + combination(n, r"通り");
    }
    
    /**
     * 引数で与えられた <code>n</code> 個の要素から <code>r</code> 個の要素を選び出す組み合わせの総数を返す。
     * このメソッドは必ず再帰呼び出しによって実装すること。
     * 再帰的定義によって組み合わせの総数 combination(n,r) を定義すると、以下のようになる。
     <pre>
     * combination(n,0) = 1
     * combination(n,n) = 1
     * combination(n,r) = combination(n-1, r-1) + combination(n-1, r)  (r != 0, r != n)
     </pre>
     @param n 全体の個数
     @param r 選び出す個数
     @return 組み合わせの総数
     */
    public static int combination(int n, int r) {
        if (r == 0) {
            return 1;
        }
        else if (n == r) {
            return 1;
        }
        else {
            return combination(n - 1, r - 1+ combination(n - 1, r);
        }
    }
}