用递归拆分一个数

作者在 2010-10-12 09:11:00 发布以下内容
#include<iostream>
using namespace std;
int *arr;
int n;
void print()
{
    cout << n << " = " << arr[0];
    int i = 1;
    while(arr[i])
        cout << " + " << arr[i++];
    cout << endl;
}

void process(int arr[], int max, int n)//n为剩余值,max为当前位置可以为最大的数。
{
    arr[0] = max < n ? max : n;
    if(n == 0)
    {
        print();
    }
    for(arr[0]; arr[0]>0; --arr[0])
        process(arr+1, arr[0], n-arr[0]);
    arr[0] = 0;
}
int main()
{
    cout << "Please input a integer:";
    cin >> n;
    arr = new int[n+1];//多出来一个当哨兵
    if(arr)
    {
        for (int i = 0; i != n; ++i)
            arr[i] = 0;

        process(arr, n, n);

        delete [] arr;
    }
    else
    {
        cerr << "memory alloc error" << endl;//英语很烂
    }
    return 0;
}
默认分类 | 阅读 983 次
文章评论,共0条
游客请输入验证码
浏览30056次