第5章递归第1讲-什么是递归
递归算法及经典例题详解

递归算法及经典例题详解
1.什么是递归
递归简单来说就是在运行过程中不断调用自己,直到碰到终止条件,返回结果的过程。
递归可以看作两个过程,分别是递和归。
递就是原问题把要计算的结果传给子问题;归则是子问题求出结果后,把结果层层返回原问题的过程。
下面设一个需要经过三次递归的问题,为大家详细看一下递归的过程:当然,现实中我们遇到递归问题是不会按照图中一样一步一步想下来,主要还是要掌握递归的思想,找到每个问题中的规律。
2.什么时候使用递归
递归算法无外乎就是以下三点:1.大问题可以拆分为若干小问题2.原问题与子问题除数据规模不同,求解思路完全相同3.存在递归终止条件
而在实际面对递归问题时,我们还需要考虑第四点:
当不满足终止条件时,要如何缩小函数值并让其进入
下一层循环中
3.递归的实际运用(阶层计算)
了解了大概的思路,现在就要开始实战了。
下面我们来看一道经典例题:
求N的阶层。
首先按照思路分析是否可以使用递归算法:
1.N!可以拆分为(N-1)!*N
2.(N-1)!与N!只有数字规模不同,求解思路相同
3.当N=1时,结果为1,递归终止
满足条件,可以递归:
publicstaticintFactorial(int num){if(num==1){return num;}return num*Factorial(num-1);}
而最后的return,便是第四步,缩小参数num的值,让递归进入下一层。
一般来说,第四步往往是最难的,需要弄清该如何缩
小范围,如何操作返回的数值,这一步只能通过不断
地练习提高了(当然如果你知道问题的数学规律也是
可以试出来的)。
递归

递归公认的递归(Recursion)的标准定义是非常难理解的:若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的;若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。
递归一词很少有过专业的定义,因此本文不在于去解释上一段文字的意义。
虽然概念抽象,但递归其本身是不难理解的。
通过本文的介绍,读者不一定能深入了解递归,只要能通过具体的例子模模糊糊地知道一些递归的思想和用途就可以了。
究竟什么是递归呢?其实,递归就是大鱼吃小鱼,就是一条蛇咬住自己的尾巴。
递归是指一样东西自己包含了自己。
对于这一点,拿“谢尔品斯基地毯”(Sierpinski Gasket)来说明是最恰当不过的了。
曲线在几何学中的概念很好理解,就是只有长度而没有宽度的线条。
数学中有各种各样的曲线,如圆、直线、抛物线、双曲线、正弦曲线等。
它们都可以用一定的方法画出来。
例如,圆可以用圆规画出来,正弦曲线也可以用机器边在纸带上往复记号边拉纸带的方法画出来。
事实上却没那么麻烦,画曲线有一个最常用的“万能方法”——似乎所有的曲线都可以用“描点法”画出,因为曲线没有宽度嘛,一个一个的点连起来,随便多奇怪的曲线都应该能画出。
但随着数学的发展,这一点遭到了置疑。
波兰数学家谢尔品斯基就想出了一个的确是一种曲线但永远无法画出的图形。
他构造这种曲线的方法就运用了递归。
随便找了一个正方形,把它分成3×3规格的相等的9个小正方形,然后把正中间的那一个挖掉。
现在就只剩周围的八个小正方形了。
接着重复这个过程,把8个小正方形的每一个都分成更小的9份,并挖掉它中间的那个。
现在得到的就有8×8=64个正方形了。
把这64个正方形继续这样划分,并且无限制的继续下去。
这就是递归的思想,自己包含了自己,而后面的自己又包含了规模更小的自己。
这样递归下去是没完的,因此最终得到的会是没有宽度的线条。
这符合曲线的定义,但显然它是没办法画出来的。
在现实生活中,递归的现象也是可以见到的。
第五讲递推与递归PPT课件

开始,每1项等于前面3项的和。
f(n)=f(n-1)+f(n-2)+f(n-3)-----递推公式 f(1)=1 , f(2)=2 , f(3)=4 --------递推边界
27
① #include <stdio.h> //上楼问题
② void main( )
③ { int x,n,i,a,b,c;
3)第二只猴子醒来,又把桃子均分成五堆后,还是多了一 个,它也吃掉这个桃子,并拿走了其中一堆。
第三只,第四只,第五只猴子都依次如此分食桃子。 问:五只猴子采得一堆桃子数最少应该有几个呢?
11
例2:猴子分食桃子---逆推法
算法分析:
先要找第N只猴子和其面前桃子数的关系。如 果从第1只开始往第5只找,不好找,但如果思路 一变,从第N到第1去,可得出下面的推导式:
19
例11.2 骨牌问题---顺推法
➢长度为n时的骨牌铺放方案? ➢从最简单的情况开始寻找问题解决的规律?--- 顺推 ➢以 f(i) 表示n=i时的铺放方案数目。 ➢当n=1时,只有1种铺法,即f(1)=1,如下左图所示: ➢当n=2时,只有2种铺法,即f(2)=2,如下右图所示。
20
例11.2 骨牌问题---顺推法
n=1
f(n)=1
n=2
f(n)=2
n=3
f(n)=3
n=4
f(n)=3 + 1 =f[3]+ f[1]=4
n=5
f(n)=f(4)+f(2)
n=6
f(n)=f(5)+f(3)
n=7
f(n)=f(6)+f(4)
规律: f(n)=f(n-1)+f(n-3) (n>=4) 17
递归 高等数学

递归与高等数学一、递归函数递归函数是一种数学函数,它在其定义或行为中直接或间接地调用自身。
递归函数通常用于解决一些可以分解为更小的子问题的问题。
递归函数可以分为两类:基本递归函数和递归函数。
基本递归函数是直接解决问题的函数,而递归函数则是通过调用自身来解决问题的函数。
在高等数学中,许多问题可以通过使用递归函数来解决。
例如,在微积分中,许多积分和级数可以通过递归方法进行计算。
此外,在实数和复数分析中,许多函数可以通过递归函数进行展开和逼近。
二、递归数列递归数列是一种特殊的数列,它可以通过一系列规则生成。
常见的递归数列包括斐波那契数列、卢卡斯数列等。
递归数列在数学和计算机科学中都有广泛的应用。
在高等数学中,递归数列可以用于解决一些与序列相关的问题。
例如,在概率论和统计学中,一些概率分布可以通过递归数列进行描行解决。
三、递归方程递归方程是一种描述自然规律的数学工具,它是通过递归函数定义的等式或系统。
常见的递归方程包括人口动态模型、斐波那契序列等。
在高等数学中,递归方程可以用于解决一些与时间相关的问题。
例如,在微分方程和差分方程中,一些问题可以通过递归方程进行描述和解决。
此外,在控制理论和系统理论中,一些系统可以通过递归方程进行建模和分析。
四、递归级数递归级数是具有特定模式的数字序列或数字集的级数表示。
它与级数、级数定理、积分级数以及算术、几何和三角级数等都有密切的关系。
在高等数学中,递归级数可以用于解决一些与数字相关的问题。
例如,在离散概率论和统计学中,一些概率分布可以通过递归级数进数进行解决。
五、递归图论图论是研究图(由顶点和边构成的图形)的数学理论。
在图论中,图是由顶点(或节点)和连接这些顶点的边构成的。
递归图论则是使用递归来定义或描述图的理论。
在计算机科学中,这可以用于计算机算法、数据结构和其他相关的领域。
例如,一种常用的数据结构是二叉堆(Binary Heap),它可以看作是一个完全二叉树,并且每个节点都有两个子节点(除了叶节点)。
递归函数解释

递归函数解释
一、递归定义
递归函数是指一个函数在其定义域内,存在某个或某些子集作为其自身的输入,也就是一个函数直接或间接调用自身的一种过程。
通常递归函数的定义会包含两部分:基本情况和递归情况。
二、基本情况
基本情况也被称为基线条件,是递归函数的结束条件。
基本情况决定了递归何时停止,它必须是直接可求解的情况。
基本情况是递归函数的根,其他递归情况都由它导出。
三、递归转化
递归转化是将问题转化为更小的同类问题的一种策略。
在递归函数中,每一个递归调用都是为了解决一个更小的子问题,以便于通过这些子问题的解来找到原问题的解。
四、递归终止
递归终止是指函数在完成一系列递归调用后,最终达到基本情况并返回结果的过程。
递归终止是递归函数的终点,也是递归函数开始返回结果的地方。
五、递归层次
递归层次是指函数在执行过程中所经历的递归深度。
每一个递归调用都会增加一层的递归深度,直到达到基本情况并返回结果,然后开始逐层返回,直到完成所有递归调用。
理解递归层次有助于更好地理解递归函数的执行过程和时间复杂度。
什么是递归

什么是递归?递归(Recursion)是一种编程技术,其中一个函数调用自身来解决问题。
递归是通过将问题分解成更小的子问题来解决复杂问题的一种方法。
这种自我调用的过程在每次调用中都会处理一个更小的问题,直到达到基本情况(终止条件),然后逐步返回结果,最终解决整个问题。
递归的核心思想是将复杂问题分解成更小规模的相同问题。
每次递归调用都会将问题的规模减小,直到问题达到一定的规模,可以直接解决。
这个基本情况通常是一个简单且不再需要递归的情况。
递归的实现通常包括以下几个要素:1. 基本情况:基本情况是递归调用的终止条件。
当问题的规模减小到一定程度,可以直接解决时,递归将停止。
在基本情况下,函数通常直接返回结果而不再进行递归调用。
2. 递归调用:递归函数在解决问题的过程中会调用自身来处理更小规模的子问题。
递归函数通过传递问题的子集或更小的输入来减小问题的规模。
递归调用将重复进行,直到达到基本情况。
3. 问题的规模减小:递归函数通过每次调用将问题的规模减小来逐步解决问题。
这通常涉及到在每次递归调用中使用不同的输入或参数。
问题的规模必须在每次递归调用中减小,否则递归将无法终止,导致无限循环(无穷递归)。
递归的一个典型示例是计算阶乘。
阶乘是指从1到某个正整数之间所有整数的乘积。
使用递归,我们可以将阶乘问题分解为更小的子问题,直到达到基本情况。
例如,计算5的阶乘(5!)可以使用递归的方式来实现:```factorial(n):if n == 0: // 基本情况return 1else:return n * factorial(n-1) // 递归调用```在上面的示例中,当n等于0时,递归调用将停止,返回1作为结果。
否则,函数将n与n-1的阶乘相乘,并继续递归调用,直到达到基本情况。
递归函数需要小心处理,确保递归调用能够终止,并且问题的规模在每次递归调用中减小。
否则,递归可能会导致堆栈溢出或无限循环的问题。
递归在许多算法和数据结构问题中都有应用,例如树的遍历、图的搜索、排序算法等。
递归的理解

递归的理解
递归是一种算法或编程技巧,它通过自身调用来解决问题,常常被用来处理具有递归结构的问题。
在递归中,一个函数或子程序会重复调用自身,直到达到终止条件为止。
递归的理解需要注意以下几个方面:
首先,递归必须有一个终止条件,否则会陷入死循环。
终止条件是指递归应该停止的条件,一旦达到这个条件,递归就会结束。
其次,在递归过程中,每一级递归都需要相同的处理方式。
也就是说,每次递归都要按照同样的逻辑进行处理,直到达到终止条件。
第三,在递归中,每次调用都会有一定的开销,包括函数调用、参数传递和栈空间的分配等。
因此,在使用递归时,需要注意内存的使用和性能的优化。
最后,递归常常被用来解决复杂的问题,例如快速排序、归并排序、二叉树的遍历等。
但是,如果不恰当地使用递归,会导致栈溢出等问题。
因此,在使用递归时,需要仔细考虑其适用性和实现方式。
总之,递归是一种非常有用的算法思想,理解递归需要掌握其基本原理和注意事项,才能正确地应用到实际问题中。
- 1 -。
递归名词解释

递归名词解释
递归:
1、概念:递归是一种反复出现的算法,它将一个大问题拆分成若干小
问题,并且使用结果解决大问题,在解决大问题时候可以多次重复调
用自身以达到解决问题的目的。
2、定义:递归是一种编程技术,它提供了一种可以让程序创建动态的、多层的数据结构的一种方法,也就是用较少的语句可以实现数据结构
的表示。
3、原理:递归调用的原理是多次执行同一个程序段,在程序段内部,
对已知的特殊情况保存结果,减少运算量,并根据条件调用自身以解
决整个问题。
4、特点:
* (1)可以根据已知条件简化问题
* (2)可以多次调用自身、产生迭代结果,在一次调用中展开多次迭代,以实现复杂数据结构的表示
* (3)可以在程序段中使用条件语句,在特定条件真伪时返回特定的结
果
* (4)可以实现交替操作,多次调用自身,每次执行的逻辑可能不一样。
5、应用场景:
* (1)求解较复杂的数学问题,比如斐波那契数列问题、汉诺塔问题等* (2)求解复杂算法,比如快速排序、归并排序等
* (3)实现迭代计算,让程序可以定义无限长度的数据结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。