1. 程式人生 > >練習2-18 求組合數(遞迴)

練習2-18 求組合數(遞迴)

本題要求編寫程式,根據公式C​n​m ​​=​ n! / m!(n−m)!​​​​算出從n個不同元素中取出m個元素(m≤n)的組合數。

建議定義和呼叫函式fact(n)計算n!,其中n的型別是int,函式型別是double

輸入格式:

輸入在一行中給出兩個正整數m和n(m≤n),以空格分隔。

輸出格式:

按照格式“result = 組合數計算結果”輸出。題目保證結果在double類型範圍內。

輸入樣例:

2 7

輸出樣例:

result = 21

程式碼:

#include <stdio.h>
/*求階乘的遞迴函式*/
double fact(int k){
	if(k == 1 || k == 0){    //1或0的階乘為1.
		return 1;
	}
	else{
		return k * fact(k-1);    //其他數的階乘遞迴。
	}
}
int main (void){
	int m, n;
	double result;
	
	scanf("%d %d", &m, &n);
	result = fact(n) / fact(m) / fact(n-m);    //有了上面的遞迴函式,組合數變成乘除。
	printf("result = %.0lf", result);    //%.0lf表示小數位是0位。
	
	return 0;
}