一道递归裸题。
直接上代码了:
特别注意递归条件的判读,一开始没有考虑到盘子数为1的情况。只考虑苹果为0了。
#include <iostream>
using namespace std;
int get_res(int m, int n) {
if (n == 1 || m == 0)//n=1是所有苹果在一个盘子所以只有一种可能,或者说没有苹果所以也只有一种可能
{
return 1;
}
if (m < n)//m<n即盘子多 get_res(m,n) = get_res(m,m)
return get_res(m, m);
else //如果水果多 get_res(m,n) = get_res(m-n,n)+get_res(m,n-1);
//前者是没有空盘子后者是至少有一个空盘子
return get_res(m - n, n) + get_res(m, n - 1) ;
}
int main(int argc, char const * argv[])
{
ios::sync_with_stdio(false);
int t, m, n ;
cin >> t;
while (t--) {
cin >> m>>n;
cout << get_res(m,n)<<endl;
}
return 0;
}