1. 程式人生 > >(遞迴)整數分解為若干項之和

(遞迴)整數分解為若干項之和

這裡寫圖片描述
輸入樣例:

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的執行過程,部分截圖
這裡寫圖片描述
這個不好理解,再看看。。。。