【学习笔记】二项式系数 Binomial Coefficient

238 阅读1分钟

a2457a7ef3c77831e34e06a1fe17a80b84a03181.svg

82edaea83157132aadd2a0ad1e481bfcf6791653.svg

Recursion & Dynamic Programming

使用递归和动态规划来计算二项式系数。


public class BinomialCoefficient {
	// recursion 
	public static int recurBinomial(int n, int k) {
		if(k == 0 || n == k) return 1; 
		else return recurBinomial(n-1, k-1) + recurBinomial(n-1, k); 
	}
	
        // 动态规划的效率会更高
	public static int dpBinomial(int n, int k) {
		int i, j; 
		int[][] dpArray = new int[n+1][k+1]; 
		
		for(i = 0; i < n+1; i++) 
			for(j = 0; j <= i && j < k+1; j++) {
				if(j == 0 || j == i) dpArray[i][j] = 1; 
				else dpArray[i][j] = dpArray[i-1][j-1] + dpArray[i-1][j]; 
			}
		
		// 打印出数组
		for(int p = 0; p < n+1; p++) 
			for(int q = 0; q <= p && q < k+1; q++) {
				if(q == p || q == k) System.out.print(dpArray[p][q] + "\n");
				else System.out.print(dpArray[p][q] + " "); 
			}
		
		return dpArray[n][k]; 
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 10; 
		int k = 5; 
		int recurResult = recurBinomial(n, k); 
		int dpResult = dpBinomial(n, k); 
		
		System.out.println("The recursion version of (n k) is: " + recurResult); 
		System.out.println("The dynamic programming version of (n k) is: " + dpResult); 
	}

}