当前位置: 首页 > news >正文

【算法】递归思想

下面程序的功能是输出数组的全排列。请填空。

void perm(int list[], int k, int m)
{
    if (    )
    {
        copy(list,list+m,ostream_iterator<int>(cout," "));
        cout<<endl;
        return;
    }
    for (int i=k; i<=m; i++)
    {
        swap(&list[k],&list[i]);
        (    );
        swap(&list[k],&list[i]);
    }
}

说一些我对递归思想的理解:递归的思想类似归纳思想,首先考虑递归一定要学会简化思维,不能想的太深,而是只考虑一个层次的变化;否则就会陷入思维的误区;

以这道题为例,假设是一个长度为4的数组,a、b、c、d
首先应该先明白什么是一个长度为n的数组的全排列:第一个位置有n种可能,第二个位置有n-1中可能.....所以总共有n!个全排列;
递归思想:首先一个循环让a、b、c、d分别作数组首字母,也就是第一个位置的n种可能;然后不要再考虑第二个位置、第三个位置....这样就相当于把递归展开考虑,不可能想完;而是默认我们的算法可以得到剩下n-1个位置的全排列,进行递归[perm(list,k+1,m)];
接下来再考虑出口就行了,也就是当最后只剩下一个位置没有确定时,k==m时,把数组打印出来即可;
总的来说,考虑递归就要先默认函数正确,然后在函数的基础上设计这个函数;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【加密】OpenSSL 介绍和使用
  • 【加密】对称加密DES和非对称加密AES、数字签名
  • 【加密】DES加密算法中,ECB和CBC模式有什么区别?
  • 【DevOps 】DevOps简介
  • 【mySQL++】C++ 操作mySQL
  • 【压缩】数据压缩算法---编辑中
  • 【MySQL】Linux学习之CentOS7安装Mysql5.7直接覆盖Mariadb
  • 【libevent】libevent快速入门
  • 【Libevent】Libevent使用例子,从简单到复杂
  • 【导航】自己的导航网站
  • 【OSI】TCP网络协议四层/五层/七层协议
  • 【进程间通信】Unix domain socket (进程间通信)
  • 【Redis】Redis数据类型List的安全队列和不安全队列
  • 【多线程】C++11多线程(简约但不简单)
  • 【C++】C++ 不错的学习网站
  • python3.6+scrapy+mysql 爬虫实战
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android系统模拟器绘制实现概述
  • Angular Elements 及其运作原理
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • java正则表式的使用
  • REST架构的思考
  • Spring-boot 启动时碰到的错误
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 程序员该如何有效的找工作?
  • 程序员最讨厌的9句话,你可有补充?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 写给高年级小学生看的《Bash 指南》
  • ​520就是要宠粉,你的心头书我买单
  • #NOIP 2014#Day.2 T3 解方程
  • #QT(TCP网络编程-服务端)
  • (26)4.7 字符函数和字符串函数
  • (3) cmake编译多个cpp文件
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .net 获取url的方法
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C#⾯试题汇总系列:⾯向对象
  • /bin、/sbin、/usr/bin、/usr/sbin
  • ::
  • @Autowired多个相同类型bean装配问题
  • @EnableWebSecurity 注解的用途及适用场景
  • @font-face 用字体画图标
  • @Responsebody与@RequestBody
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现