对递归题目的求解就是要在最一般情况下进行考虑,也就是说,要考虑这道题
的本质,然后使用递归求解。
对于本道题,是将 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 }
原文:https://www.cnblogs.com/pureayu/p/13655039.html