递归实现的三种枚举

简介: 递归实现的三种枚举

1.指数型枚举:1~n里选任意个的所有情况:

     通过数组记录每个数字的选择情况:未决定,选,不选

       对没选过的数,可以直接选或者不选,所以往选和不选两个方向递归

       递归参数是当前要做选择的数

void dfs(int x){
    if(x > n){
        for(int i = 1;i <= n;i++){
            if(f[i] == 2) cout << i << " ";
        }
        puts("");
        return;
    }
    f[x] = 2;
    dfs(x+1);
    // f[x] = 0;
    f[x] = 1;
    dfs(x+1);
    // f[x] = 0;
}

2.组合型枚举

       1~n里·选m个的所有情况

       bool数组记录选择情况

       没选过就选

       //通过保证递增来保证枚举的情况不和之前的情况重复

       递归参数写当前在选第几个数

void dfs(int x){
    if (x + n - (f[x-1]+1) < m) return;
    // 剪枝:凑不齐m个数了
    if(x > m){
        for(int i = 1;i <= m;i++){
            cout << f[i] << " ";
        }
        puts("");
        return ;
    }
    for(int i = f[x-1]+1;i <= n;i++){//通过保证递增来保证枚举的情况不和之前的情况重复
        if(!st[i]){
            f[x] = i;
            st[i] = true;
            dfs(x+1);
            f[x] = 0;
            st[i] = false;
        }
    }
}

3.排列型枚举

       bool数组记录选不选当前情况,递归时没选过就直接选

       递归不用保证递增

void dfs(int x){
    //dfs到达边界
    if(x > n){
        for(int i = 1;i <= n;i++){
            cout << f[i] << " ";
        }
        puts(" ");
        return;
    }
    //dfs 开始枚举分支
    for(int i = 1;i <= n;i++){
        if(!st[i]){
            st[i] = true;
            f[x] = i;
            dfs(x+1);
            st[i] = false;
            // f[i] = 0;dfs的回溯流程,但在代码层面无实际意义
        }
    }
}
目录
相关文章
|
11月前
|
机器学习/深度学习 人工智能 开发框架
企业内训|提示词工程师高阶技术内训-某运营商研发团队
TsingtaoAI 近期为某运营商技术团队提供了为期两天的提示词工程师高级技术培训。课程涵盖深度学习前沿理论、大模型技术架构设计与优化,以及提示词工程在电信行业的应用。通过技术探讨、案例分析和实战操作,学员将掌握最新的 LLM 技术和提示词工程技巧,提升在复杂业务环境中设计、优化和部署大模型解决方案的能力。课程强调技术深度与业务场景结合,适合具有一定深度学习基础的专业人员。
236 14
|
人工智能 监控 算法
数字化转型不是什么,而是什么?
数字化转型不是什么,而是什么?
|
Java 关系型数据库 MySQL
安装 Nacos Server | 学习笔记
快速学习安装 Nacos Server。
785 0
SAP PM 初级系列11 - 为维修工单触发采购申请
SAP PM 初级系列11 - 为维修工单触发采购申请
SAP PM 初级系列11 - 为维修工单触发采购申请
|
安全 物联网 网络安全
面对黑客不断进化的攻击能力,你的游戏真的安全么?
在3月8日的“2017游戏行业全球同服和安全攻防技术沙龙”上,阿里云安全方案高级专家蕴藉为大家介绍了国内外游戏行业的安全形势以及阿里云云盾所提供的全方位优先权解决方案,并结合具体案例介绍了阿里云游戏安全解决方案的应用实战效果。
5255 0
|
NoSQL 数据库 Redis
Redis——简单介绍
一,简单介绍     Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。   Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性。
1234 0
|
9天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1197 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1115 87

热门文章

最新文章