. 自然数分解 【题目描述】 编写一个递归函数,要求给定一个正整数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);
}