欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(递归)整数分解为若干项之和

程序员文章站 2022-03-13 16:46:29
...

(递归)整数分解为若干项之和
输入样例:

7

输出样例:

7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7
#include<iostream>
using namespace std;
int a[31], sum, cnt, top = -1;
void f(int i, int n)
{
    int k, j;
    if(sum == n)
    {
        cnt++;
        cout<<n<<"=";
        for(k = 0; k < top; k++)
        cout<<a[k]<<"+";
        if(cnt % 4 == 0 || a[top] == n)
        cout<<a[top]<<endl;
        else cout<<a[top]<<";";
        return ;
    }
    if(sum > n) return ;
    for(j = i; j <= n; j++)
    {
        a[++top] = j;
        sum += j;
        f(j, n);
        sum -= j;//回溯
        top--;//回溯
    }
}
int main()
{
    int n;
    cin>>n;
    f(1, n);
    return 0;
}

6的执行过程,部分截图
(递归)整数分解为若干项之和
这个不好理解,再看看。。。。

相关标签: 递归