遞歸法解決簡單組合數問題

問題

用遞歸法計算從n個人中選擇k個人組成一個委員會的不同組合數。

分析

由n個人裏選k個人的組合數 = 由n-1個人裏選k個人的組合數 + n-1個人裏選k-1個人的組合數

從n-1個人增加到n個人,最後一個人可能被選中也可能不被選中,有兩種情況:

  1. 不被選中,即需要從n-1個人中選擇k個人。
  2. 被選中,即需要從n-1個人中選擇k-1個人。

這兩種情況加起來就是從n個人裏選擇k個人的組合數。

代碼實現

#include <iostream>
using namespace std;


// 計算從n個人裏選k個人的組合數
int comm(int n, int k)
{
    if(k > n)
        return 0;
    else if(n == k || k == 0)
        return 1;
    else
        return comm(n-1, k) + comm(n-1, k-1);   
}

int main()
{
    int n, k;
    cout << "Please enter two integers n and k: ";
    cin >> n >> k;
    cout << "C(n, k) = " << comm(n, k) << endl;

    return 0;
}

參考

https://blog.csdn.net/yybmec/article/details/45267519

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章