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

来源:互联网 发布:乐视手机怎么关闭网络 编辑:程序博客网 时间:2024/06/01 21:37

这里写图片描述
输入样例:

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+27=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+27=1+2+4;7=1+3+3;7=1+6;7=2+2+37=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的执行过程,部分截图
这里写图片描述
这个不好理解,再看看。。。。