poj1664-放苹果(递归)
一,题意: M个苹果放在N个盘子里,允许有盘子空着,问共有多少种不同的分法。 二,思路: 递归的思想求解: 1,有反复执行的过程(调用本身) 第一种情况n>m : 必定有 n-m 个盘子空着,去掉不影响。 第二种情况n<=m : i,有至少一个盘子空着; ii,每个盘子都有苹果; 总的放苹果的方法数为两者之和: 2,有跳出反复执行过程的条件(递归出口) 当苹果放完或者只有一个盘子的时候 *递归两条路: i,n会逐渐减少,最终到达出口 n==1 ; ii,m逐渐减少,因为n>m时,return work(m,m),所以终会到达出口 m==0; 三,步骤: 1,if(n>m) work(m,n) = work(m,m) ; else i,work(m,n) = work(m,n-1); ii,work(m,n) = work(m-n,n); work(m,n) = work(m,n-1) + work(m-n,n); 2,if(m==0||n==1) return 1; 1 #include<iostream> 2 using namespace std; 3 4 int work(int m , int n){ 5 if(m==0||n