練習2-18 求組合數(遞迴)
阿新 • • 發佈:2019-02-12
本題要求編寫程式,根據公式Cnm = 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; }