如题是刚开始写递归的基础题,对于n个数我们都有两种选择,选与不选,那我们用一个数组表示状态,0为未处理,1为选中,2为不选。每次递归都要更新状态,递归结束后回归上一级的状态。当深度等于整数个数时,则表示一次递归结束,最后将每个结果输出。就完成了题目的要求。
#include<cstdio> #include<string> #include<iostream> #include<algorithm> using namespace std; const int N = 15; //最大数据个数 int n; int sta[15]; //每个数的状态 void dfs(int i) { if (i == n) { for (int j = 0; j < n; j++) { if (sta[j] == 1) { printf("%d ", j + 1); //下标从0开始 } } puts(""); return; } sta[i] = 1; //分支一种为选中,另一种为不选 dfs(i + 1); sta[i] = 2; //更新状态 dfs(i + 1); } int main() { scanf("%d", &n); dfs(0); return 0; }