分两种方向考虑:1)有盘子空着
2)所有的盘子上都有苹果
另外,如果盘子的个数大于苹果的个数,也要考虑进去。直接把多余的盘子拿掉,对结果是没有影响的。
#include<iostream>
using namespace std;
int count(int m, int n){//主要是运用递归的思想
if (m <= 1 || n <= 0)
return 1;
//当盘子数多于苹果数的时候,就算每个盘子里只放一个苹果
//那还是有多余的盘子,这些多余的盘子对计算结果无影响,
//所以,相当于count(m,n)=count(m,m)
if (m < n)
return count(m, m);
//当苹果数大于盘子数时,分两种考虑
//1)至少有一个盘子空着的时候,那么这个空着的盘子就是多余的,可以拿掉
//相当于count(m,n)=count(m,n-1)
//2)当每个盘子里都有苹果的时候,那么我可以把每个盘子里都拿掉一个苹果
//变成了m-n个苹果放在n个盘子里。
else
return count(m, n - 1) + count(m - n, n);
}
void main(){
int apples, plates;
cin >> apples >> plates;
count(apples, plates);
system("pause");
return;
}