1.整数划分-递归

//对于一个正整数n的划分,就是把n变成一系列正整数之和的表达式。注意,分划与顺序无关,例如6=5+1跟6=1+5是
//同一种分划。另外,单独这个整数本身也算一种分划。
//例如:对于正整数n=5,可以划分为:
//1+1+1+1+1
//1+1+1+2
//1+1+3
//1+2+2
//2+3
//1+4
//5
#include <iostream>
using namespace std;

int huafen(int n, int m){
    if(n == 1 || m == 1)
        return 1;
    else if(n > m)
        return huafen(n, m - 1) + huafen(n - m, m); //划分中包含m的情况,即{m, {x1,x2,...xi}}, 其中{x1,x2,... xi} 的和为n-m,因此这情况下为f(n-m,m)
    else if(n < m)
        return  huafen(n, n);
    else if(n == m){
        return 1 + huafen(n, m - 1);
    }
}
//http://blog.csdn.net/u013197555/article/details/48436947
int main(){
    int n;
    cin >> n;
    cout <<    huafen(n, n);
    return 0;
}

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7279801.html