递归的三种选数

/*

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

#include<bits/stdc++.h>

using namespace std;

const int N=20;

int n;

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

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

if(x>n){

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

if(st[i]==1){

printf("%d ",i);

}

}

printf("\n");

return ;

}

//不选

st[x]=2;

dfs(x+1);

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

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

//选

st[x]=1;

dfs(x+1);

st[x]=0;

}

int main(){

scanf("%d",&n);

dfs(1);

return 0;

}*/

/*

全排列

#include<bits/stdc++.h>

using namespace std;

const int N=10;

int n;

bool st[N];//用来表示选没选

int arr[N];//用来存答案

void dfs(int x){

if(x>n){

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

printf("%5d",arr[i]);//五个场宽

}

printf("\n");

return ;

}

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

if(!st[i]){

st[i]=true;

arr[x]=i;

dfs(x+1);

st[i]=false;

arr[x]=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 arr[N];

void dfs(int x,int start){

if(x>r){

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

printf("%3d",arr[i]);

}

printf("\n");

return;

}

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

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

dfs(x+1,i+1);

arr[x]=0;

}

}

int main(){

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

dfs(1,1);

return 0;

}

相关推荐
CoovallyAIHub1 天前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
木心月转码ing1 天前
Hot100-Day14-T33搜索旋转排序数组
算法
会员源码网1 天前
内存泄漏(如未关闭流、缓存无限增长)
算法
颜酱1 天前
从0到1实现LFU缓存:思路拆解+代码落地
javascript·后端·算法
颜酱2 天前
从0到1实现LRU缓存:思路拆解+代码落地
javascript·后端·算法
CoovallyAIHub2 天前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub2 天前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github