放苹果(递归)

题目:

解析:

打个比方,5个苹果和5个盘子,列出两个极端的:各个盘子放一个和最后一个盘子放5个

这两个极端的就可以作为起始和结束

中间就一直放苹果减盘子数往前推就行

这样一来就简单了,上代码:

#include<bits/stdc++.h>
using namespace std;
int a(int m,int n){
    if(n==1||n==0){
        return 1;//结束条件,所有的苹果都放到一个盘子里时 
    }else if(m<n){
        return a(m,m);//如果苹果数< 盘子数那么就会有一些盘子会空着,把那些盘子给去掉 
    }else{
        return a(m-n,n)/*放苹果*/+a(m,n-1)/*逐渐去掉盘子往前推*/;
    } 
}
int main(){
    int m,n;
    cin>>m>>n;
    cout<<a(m,n);
    return 0;
}

 

posted @ 2022-04-12 21:49  陈瑞淞  阅读(107)  评论(0)    收藏  举报