思路:我们不妨给每个数字组合后面都加上0
以0 作为搜索的末尾
则比如 6, 可以有的组合有
6 0 、6 1 0 、6 2 0 、6 2 1 0 、6 3 0 、6 3 1 0
然后设置一个函数,并只设一个参数,即只从一个维度进行考虑
如果说我们现在传入参数6, 那么接下来的数字是 0 ~ 3 接着再以
0 ~ 3 之间包括 0 和 3 作为参数进行传递,以此类推
当传入的参数是 0 时, 返回数字 1, 即一种方案
画个图
#include <iostream>
using namespace std;
int f(int a){
if (a == 0) return 1;
int res = 0;
for (int i = 0; i <= a / 2; i ++)
res += f(i);
return res;
}
int main(){
int n;
scanf("%d", &n);
cout << f(n);
return 0;
}