计算一个数的所有划分。
如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; }
分析图示: