自然数分解 c++求解

. 自然数分解 【题目描述】 编写一个递归函数,要求给定一个正整数n,输出和为n的所有非增
的正整数和式。例如 n=5,则输出的和式结果如下所示:
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
【样例输入】
6
【样例输出】
6=6
6=5+1
6=4+2
6=4+1+1
6=3+3
6=3+2+1
6=3+1+1+1
6=2+2+2
6=2+2+1+1
6=2+1+1+1+1
6=1+1+1+1+1+1

望采纳!谢谢

#include <iostream>  //加入头文件,可认为是必备条件
#include <string>    //加入头文件,可认为是必备条件
using namespace std; //使用命名空间,就可以调用对应函数
 
int int_HuaFen(int n, int m);    // 定义划分函数,有两个参数n m
void show(int n, int m, string s); //定义显示函数,三个参数n m ,字符串s
 
int main()    //从这里开始看起
{
    string s; // 用于展示所有整数划分形式
    int n = 1; // 用于整数划分的整数
 
    cout << "请输入一个正整数进行整数划分:";   //输出
    cin >> n;                                 //输入
 
    cout << "全部划分为:" << endl;            //输出
    show(n, n, s);                            //调用show函数
 
    cout << "划分数为:" << int_HuaFen(n, n) << endl;  //调用划分函数
 
    return 0;
}
 
// 递归计算划分数
int int_HuaFen(int n, int m)       
{
    if (n == 1 || m == 1)        //如果输入的数为1
        return 1;           
    else if (n < m)              //如果输入的n小于m
        return int_HuaFen(n, n);  //继续调用这个函数,将大的数继续划分
    else if (n == m)              //如果相等
        return 1 + int_HuaFen(n, n - 1);  //就把其中一个减小并继续划分
    else
        return int_HuaFen(n, m - 1) + int_HuaFen(n - m, m);   //其余的情况,将把两个数划分成两组
}
 
// 递归展示所有划分形式
void show(int n, int m, string s) {
    if (n == 1 || m == 1) {              //若相等
        for (int i = 0; i < n - 1; i++)
            s += string("1+");
        cout << s << "1\n";
        return;
    }else if (m > n) {
        return show(n, n, s);
    }else if (n == m) {
        cout << s << n << endl;
        return show(n, m - 1, s);
    }
    if (n - m != 0)
        show(n - m, m, s + to_string(m) + string("+"));
    else
        cout << s << m << endl;
    show(n, m - 1, s);
}