计算一个数的所有划分。
如3
3
2+1
1+1+1
代码:
#include <iostream>
using namespace std;
void F(int _n, int _k, int _data[])
{
if(_n == 0)
{
for(int j = 0; j < _k; j++)
cout << _data[j] << " ";
cout << endl;
return;
}
for(int i = _n; i > 0; i--)
{
// 是否排除重复,如 2 1 / 1 2,只保留一个。
//if(_k > 0 && i > _data[_k - 1]) continue;
_data[_k] = i;
F(_n - i, _k + 1, _data);
}
}
int main()
{
int data[1000];
F(3, 0, data);
return 0;
}
分析图示: