1. 程式人生 > 實用技巧 >(遞迴)集合劃分

(遞迴)集合劃分

連結

對遞迴題目的求解就是要在最一般情況下進行考慮,也就是說,要考慮這道題

的本質,然後使用遞迴求解。

對於本道題,是將 n 個元素放到 k 個盒子裡且盒子不能為空,那麼就有兩種情況,

第一種,先將任意一個元素放到盒子裡,那麼剩下 n - 1 個球和 k - 1 個盒子,對

應下面的程式碼就是cal( n - 1, k - 1)。

第二種,某一個元素不放到盒子裡,那麼就是先將剩下的 n - 1 個元素放到 k 個

盒子裡,再將這一個元素放到 K 個盒子裡的任意一個,那麼對應下面的程式碼就是

k * cal( n - 1, k).

 1 #include <iostream>
 2
#include <algorithm> 3 using namespace std; 4 int cal(int n, int k){ 5 if(n < k || k == 0) return 0; 6 if(n == k || k == 1) return 1; 7 return cal(n - 1, k - 1) + k * cal(n - 1, k); 8 } 9 int main(){ 10 int n, k; 11 cin >> n >> k; 12 cout << cal(n, k) << endl;
13 14 system("pause"); 15 return 0; 16 }