【关于递归算法的讲解】
递归算法
递归算法的思想
利用递归求解问题的三个特性
递归算法求解的执行过程
递推关系
递归算法的应用举例
小结
递归算法
递归算法是一种通过自身调用自身或间接调用自身来达到问题解决的算法。递归的基本思想是把一个要求解的问题划分成一个或多个规模更小的子问题,这些规模更小的子问题应该与原问题保持同一类型,然后用同样的方法求解规模更小的子问题。
处理重复性计算时,递归往往使函数的定义和算法的描述简单明了,易于理解,容易编程和验证。任何利用计算机求解的问题所需的计算时间与其规模是相关的。问题的规模越小,解题所需的时间也越小,从而容易处理,因此很多复杂问题使用了递推技术能够给出非常直观的解法,结构简介清晰,易于算法分析,在计算机领域,递归算法是不可或缺的。
递归算法的思想
利用递归求解问题的三个特性
求解规模为n的问题可以转化为一个或多个结构相同、规模较小的问题,然后从这些小问题的解能方便地构造出大问题的解。
递归调用的次数必须是有限的。
必须有结束递归的条件(边界条件)来终止递归。
递归算法求解的执行过程
递归算法的执行过程划分为递推和回归两个阶段。在递推阶段,把规模为n的问题的求解推到比原问题的规模较小的问题求解,且必须要有终止递归的条件。在回归阶段,当获得最简单情况的解后,逐级返回,依次得到规模较大问题的解。
例子
求f(n)=2^n.
当n=1时,f(1)=2时,f(1)=2可以作为递归出口。
当n>1时,f(n)可以分解为f(n)=2*2^n-1=2f(n-1))。因此原问题f(n)的求解可以转化为求解规模更小的子问题f(n-1),f(n-1)和 f(n)具有同一问题类型。
•该问题可以用如下递归方程来表示:
•递归算法的计算过程是由复杂到简单再到复杂 。
递推关系
递推关系常用来分析递归算法的时间和空间代价。
递推方程是自然数上的一个函数T(n),它使用一个或多个小于n时的值的等式或不等式来描述。递推方程也称为递推关系或递推式。算法运行时间复杂度主要由关于问题规模的高阶项决定,注意递推方程必须有一个初始条件(也称边界条件)。
计算递推式通常有3种方法:替换方法、迭代方法和公式法。
递归算法的应用举例
汉诺塔问题
斐波那契数列问题
八皇后问题
⛵小结
递归实质就是实现函数自身调用或者相互调用的过程,递归和归纳关联密切,归纳法是证明递归算法正确性和进行算法分析的强有力工具。
递归的运算方法,决定了它的效率较低,一是数据要不断进出栈,另一就是存在大量的重复计算,这样使得应用递归时,输入的n值稍大,程序的求解就变得比较困难,故在有些情况下,递归可以转化为效率较高的非递归。
如果这篇【文章】有帮助到你,希望可以点个赞
【关于递归算法的讲解】相关推荐
- 数据结构基础 之 递归算法实例讲解
在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易 ...
- C语言全排列递归算法理解,C#算法之全排列递归算法实例讲解
排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 ...
- 微课|中学生可以这样学Python(8.4节):递归算法例题讲解2
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第8章 常用算法的Python实现 8.4 递归算法案例分析 京东购买链接:https://i ...
- 微课|中学生可以这样学Python(8.4节):递归算法例题讲解3
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第8章 常用算法的Python实现 8.4 递归算法案例分析 京东购买链接:https://i ...
- 微课|中学生可以这样学Python(8.4节):递归算法例题讲解1
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第8章 常用算法的Python实现 8.4 递归算法案例分析 京东购买链接:https://i ...
- Ackerman的非递归算法思路讲解
简介 本文参考:https://blog.csdn.net/sanqima/article/details/48831679 我结合我自己的一些思考写一下我的思路. 从上到下分别标记为1式.2式.3式 ...
- 一个算法对于某个输入的循环次数是可以事先估计出来的_数据结构与算法:算法...
算法(algorithm )是指令的集合,是为解决特定问题而规定的一系列操作.它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出.一个算法通常来说具有以下五个特性: 输入:一 ...
- 《中学生可以这样学Python》84节配套微课免费观看地址
第1章 Python概述 微课|中学生可以这样学Python(1.2节):IDLE环境使用简介 微课|中学生可以这样学Python(1.3节):Python代码编写规范 微课|中学生可以这样学Pyt ...
- 《中学生可以这样学Python》84节微课免费观看地址
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 如果还有哪节内容感觉不好理解,可以留言,我再继续录制和分享. 第1章 Python概述 微课|中 ...
最新文章
- 【每日一算法】删列造序
- Mysql存储过程中的事务回滚
- java_OA管理系统(一):Servlet总结案例仿网络聊天室
- Minimum Array
- POJ2349+prim
- xcode 修改 infodictionary_安卓系统修改复位键生效时间
- Windows CE下驱动程序开发基础
- 天网防火墙存在一个安全隐患
- EVE-NG模拟器教程(二)——模拟器安装
- 【C#实现猜数字游戏】
- 自动控制理论——拉普拉斯变换定义及性质
- 聊聊如何实施负载均衡
- H5+App后台持续定位功能实现
- 淘宝和拼多多同类别测评
- 腾讯云tca认证题库
- 满口春日清爽 书亦烧仙草刺梨新品上市
- 用友T6 总账和明细账对账不平.是往来核算明细账有数据总账为0
- 解决运行qmake:Project ERROR: Cannot run compiler ‘cl‘. Output:
- 23种设计模式常用模式
- 关于校外访问西安电子科技大学校内图书馆资源和教务系统等的方法总结
热门文章
- 数据结构基础 之 递归算法实例讲解