描述
将一个正整数n表示成一系列正整数之和,n=n1+ n2+…+ nk(其中,n1≥n2≥…≥nk≥1,k≥1).正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数称为正整数n的划分数,记作P(n)。
例如,正整数6有如下11种不同的划分,所以P(6)=11.
6;
5+1;
4+2,4+1+1;
3+3,3+2+1,3+1+1+1;
2+2+2,2+2+1+1,2+1+1+1+1;
1+1+1+1+1+1.
输入
测试文件有多个测试数据,每个测试数据为一个正整数n(1≤n≤100),占一行。
输出
对每个测试数据计算其划分数P(n),每个结果占一行。
样例输入
6
2
2
样例输出
11
2
2
提示
算法不能使用简单循环和简单递归算法
#include<iostream>
#include<cstdio>
using namespace std;
int fun(int n,int m)
{
if(n<1||m<1) return 0;
if(n==1||m==1) return 1;
if(n<m) return fun(n,n);
if(n==m) return fun(n,m-1)+1;
return fun(n,m-1)+fun(n-m,m);
}
int main()
{
int n,i,j,s;
while(cin>>n)
{
if(n<1||n>100) break;
cout<<fun(n,n)<<endl;
}
return 0;
}