递归的三种选数

/*

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

#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;

}

相关推荐
取名真是3 分钟前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考20 分钟前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt2 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one4 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼4 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
小超人诞生日记5 小时前
C++ 智能指针的使用及其原理详解
c++·算法
AiNightVision9 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.33310 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
小郎君65810 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法