92.递归实现指数类型枚举

原题链接:92. 递归实现指数型枚举

解题思路

这等价于每个整数可以选可以不选,所有可能的方案总数有2的n次方种,通过前两节的学习我们已经知道可以进行一次循环,利用位运算来列举所有的选择方案。这一次我们使用递归来求解,在每一次递归中分别尝试某个数“选”还是“不选”两条分支,将尚未确定的整数数量减少1,从而转化为一个规模更小的同类问题。

样例代码

#include <iostream>
using namespace std;

vector<int> chosen;

void calc(int x) {
      if(x == n+1) { //边界问题
            for(int i = 0;i < chosen.size(); i++)
                  pritnf("%d ", chosen[i]);
            puts("");
            return;
      }
      //“不选x”分支
      calc(x+1);
      //“选x”分支
      chosen.push_back(x);//记录x已经被选择
      calc(x+1);//求解子问题
      chosen.pop_back();//准备回溯到上一个问题之前,还原现场      
}
int main(){
      calc(1);//主函数中的调用入口
}
posted @ 2020-12-18 16:36  hnkjdx_react  阅读(96)  评论(0编辑  收藏  举报