递归的三种选数

/*

指数型枚举(每个数有选和不选两种情况)

#include<bits/stdc++.h>

using namespace std;

const int N=20;

int n;

int stN;//记录每个数的状态,0还没有考虑,1表示选这个数,2表示不选这个数

void dfs(int x){//x表示枚举到了哪个位置

if(x>n){

for(int i=1;i<=n;i++){

if(sti==1){

printf("%d ",i);

}

}

printf("\n");

return ;

}

//不选

stx=2;

dfs(x+1);

stx=0;//回溯因为从一个点到他的一个分支可以视为下一个点选

//或不选,你要到另一个分支去你就要先回到初始状态

//选

stx=1;

dfs(x+1);

stx=0;

}

int main(){

scanf("%d",&n);

dfs(1);

return 0;

}*/

/*

全排列

#include<bits/stdc++.h>

using namespace std;

const int N=10;

int n;

bool stN;//用来表示选没选

int arrN;//用来存答案

void dfs(int x){

if(x>n){

for(int i=1;i<=n;i++){

printf("%5d",arri);//五个场宽

}

printf("\n");

return ;

}

for(int i=1;i<=n;i++){

if(!sti){

sti=true;

arrx=i;

dfs(x+1);

sti=false;

arrx=0;

}

}

}

int main(){

scanf("%d",&n);

dfs(1);

return 0;

}*/

/*

组合123 124

后面比前面大

*/

#include<bits/stdc++.h>

using namespace std;

const int N=21;

int n,r;

int arrN;

void dfs(int x,int start){

if(x>r){

for(int i=1;i<=r;i++){

printf("%3d",arri);

}

printf("\n");

return;

}

for(int i=start;i<=n;i++){

arrx=i;//比如说你有多个分支那就会进入很多这个for循环所以要传i而不是start

dfs(x+1,i+1);

arrx=0;

}

}

int main(){

scanf("%d %d",&n,&r);

dfs(1,1);

return 0;

}

相关推荐
Tisfy1 小时前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
aqiu1111111 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
yi0112 小时前
DAY28: LeetCode 111. 二叉树的最小深度
人工智能·笔记·python·算法·leetcode·二叉树·递归
wuyk5553 小时前
27.LeetCode 2265. 统计值等于子树平均值的节点数 —— 后序遍历实战
stm32·单片机·嵌入式硬件·算法
xiangyun613 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list
xxwl5853 小时前
三、区域赛算法模版第三章---字符串相关算法
笔记·学习·算法
信奥卷王3 小时前
[GESP202509 六级] 划分字符串(含视频)
数据结构·算法
酒醉的胡铁3 小时前
相似度搜索的常见算法
算法·ai
局部有解3 小时前
Leetcode Hot100 - 最长连续序列
算法·leetcode·职场和发展
行者全栈架构师4 小时前
给开源 Rust 工具加一个新检查项,TRAE 帮我从想法跑到构建产物:全链路实战
前端·算法·架构