(递归)7215:简单的整数划分问题

描述 
将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。 
正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。

输入 
标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。

输出 
对于每组测试数据,输出N的划分数。

样例输入 
5

样例输出 
7

提示 
5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1

我の思考 
好吧,我是真笨啊(~ ̄(OO) ̄)ブ,虽然想到要分情况判断,结果自己很笨就想到了一两种情况??后来才发现这是一个非常常见的数学题。把它分为了要划分的数字还有最大数字是几的情况。

我の代码

#include <iostream>
using namespace std;

int carry(int n,int k){
    if(n==1||k==1){
        return 1;
    }

    if(n==k)
        return carry(n,k-1)+1;

    if(n>k)
        return carry(n-k,k)+carry(n,k-1);

    if(n<k)
        return carry(n,n);
}

int main()
{
    int n;
    while(cin>>n){
    cout<<carry(n,n)<<endl;}
    return 0;
}

我の小结 
一是要加强自己划分/分类的思想QAQ,二是发现刚开始程序跑不过,后来发现题目测试虽然是一组,但是测试用了多组,所以输入要写循环才能通过。

原文地址:https://www.cnblogs.com/rimochiko/p/7486949.html