其他分享
首页 > 其他分享> > 放苹果——递归

放苹果——递归

作者:互联网

这题和上一题一样都是将问题分解为若干个子问题,这题难度会大一点,递归关系自己想的话不是那么好想:

 

 

  这题和上一题一样,先找递推式,但是这题的递推式会稍微难一点,有两种情况,第一种情况是盘子的数量比苹果的数量多的情况,如果苹果少的话,就相当于最多只能i个盘子每个盘子放1个苹果,剩下的空盘子就不管了。第二种情况就是盘子少的话,如果有空盘子的话,就i至少会有一个空盘子把,所以就把盘子数减一继续递归,没有空盘子的方法至少每一个盘子里都有一个苹果把,先把苹果分完之后再继续这些不同的分法。

  这两题很明显就可以看出来递归的格式与思路了,最后最重要的就是边界条件的确定。边界无非就是盘数为0的话就只有1种分法,如果苹果数是0的话就只有0种分法。

#include <iostream>
using namespace std;
int f(int m, int n){
    if(n>m){
        return f(m,m);
    }
    if(m == 0)
        return 1;
    if(n == 0)
        return 0;
    return f(m,n-1)+f(m-n,n);
}
int main(){
    int t,m,n;
    cin>>t;
    while(t--){
        cin>>m>>n;
        cout<<f(m,n)<<endl;
        
    }
    return 0;
}

 

标签:return,递归,int,这题,苹果,盘子
来源: https://www.cnblogs.com/chengzhangpeideboke/p/15861278.html