二叉树算法题——拆分自然数
Acwing 登录 - AcWing
#include <bits/stdc++.h>
using namespace std;int n;
vector<int> current;
int cnt;void dfs(int remain, int start) {//递归出口if (remain == 0) {cnt++;// 输出方案cout << n << "=";for (int i = 0; i < current.size(); i++) {if (i > 0) cout << "+"; cout << current[i];}cout << "\n";return;}for (int i = start; i <= remain; i++) {if (current.empty() && i == remain) continue;//7本身排除current.push_back(i);//将元素加入方案dfs(remain - i, i); // 继续递归current.pop_back(); // 回溯,移除最后添加的 i}
}int main() {cin>>n;dfs(n, 1);cout<<cnt<<endl;return 0;
}
运行截图