【题目描述】
周老师有n个苹果,他打算把这n个苹果分给任意数量的小朋友,但每个小朋友分得苹果数不同,求周老师有多少种分法?
【思路分析】
这是一道简单递归题,个人认为是递归搜索,也就是遍历所有情况,对满足条件的情况进行计数。可以将题目转化为1~n中取任意个不同的数,有多少种组合使数的和为n,然后递归遍历,0+1,0+1+2,0+1+2+3...0+2...0+n.若等于n则cnt++(计数)。
#include<iostream>
using namespace std;
int n,cnt;
void find(int sum,int i)
{
if(n==sum){
cnt++;
return ;//计数
}
if(i>n)
return ;
if(sum>n)
return ;
for(;i<=n;i++)
find(sum+i,i+1);//将每一次的和传递下去
}
int main()
{
cin>>n;
find(0,1);
cout<<cnt;
return 0;
}