lecture04递推求解
奥林匹克及自主招生辅导材料第二集(强烈推荐)第四讲:递推方法

递推方法是人们从开始认识数量关系时就很自然地产生的一种推理思想.例如自然数中 最小的数是 1,比 1 大 1 的数是 2,接下来比 2 大 1 的数是 3,…由此得到了自然数数列:1, 2,3,4,5,….在这里实际上就有了一个递推公式,假设第 n 个数为 an,则 an+1=an+1; 即 由自然数中第 n 个数加上 1,就是第 n+1 个数.由此可得 an+2=an+1+1,这样就可以得到自然 数数列中任何一个数. 一般来说, 如果一个与自然数有关的数列中的任一项 an 可以由它前面 的 k(≤n-1)项经过运算或其他方法表示出来,我们就称相邻项之间有递归关系,并称这 个数列为递归数列.如果这种推算方法能用公式表示出来,就称这种公式为递推公式或递推 关系式.通过寻求递归关系来解决问题的方法就称为递推方法.这里所说的递推方法是指对于 某些与自然数有关的问题,我们有时可以用递推法解决,所谓用递推法解题,就是根据题目 的特点,构造出递推关系解题的一种方法,解决问题的关键在于构造递推关系.递推关系一 般可以用归纳、猜想等途径获得.利用递推法解题的一般步骤为:(1)确定初始值;(2)建立递 推关系;(3)利用递推关系求通项. 例 1.把一个圆分成 n(n 2) 个扇形,依次设为 s1 , s2 , , sn ,每个扇形都可用红、黄、蓝 3 种不同的颜色之一涂色,要求相邻的扇形颜色互不相同,问共有多少种涂色方法? 解:设不同的涂色方法有 an (n 2) 种.当 n 2 时,对 s1 有 3 种涂色方法,继而对 s2 有两 种涂色方法,得 a2 6 . 下面确定 an 的递推关系,如图所示,若先涂 s1 有 3 种涂法;继 而涂 s2 , s3 , , sn 1 均有 2 种涂法.最后到 sn ,如果只要求 sn 与 sn 1 的颜 色不同,而不顾及 sn 与 s1 的颜色是否相同,仍有 2 种涂法,这样就 共有 3 2n 1 种涂法.但是这 3 2n 1 种涂法分成了两类: 一类是 sn 与 s1 的 颜色不同,其方法数是 an ;另一类是 sn 与 s1 的颜色相同,这种涂法 不符合题意, 但把 sn 与 s1 合成一个扇形, 得出这类涂法的总数为 an 1.
递推法解排列组合问题

递推法解排列、组合及概率问题排列组合在高中数学旧教材中是相对独立的内容,而在高中数学新教材中排列组合是概率及统计的基础,因此,排列组合内容在高中数学新教材中的位置也变得相对重要起来了。
而概率是新教材中新增加的内容,也是初等概率论中最基本的内容。
在历年的高考中,排列组合知识多是选择题或填空题,概率一般是一个解答题,这些题的题型繁多,解法独特,因此得分率普遍较低。
本文试图用递推法来解决几类常见的排列组合及概率问题。
1 走楼梯问题例1:欲登上第10 级楼梯,如果规定每步只能跨上一级或两级,则不同的走法共有()(A)34种(B)55 种(C)89 种(D)144 种解法1:分类法:第一类:没有一步两级,则只有一种走法;第二类:恰有一步是一步两级,则走完10 级要走9 步,9 步中选一步是一步两级的,有C91 9种可能走法;第三类:恰有两步是一步两级,则走完10 级要走8 步,8 步中选两步是一步两级的,有C82 28种可能走法;依此类推,共有 1 C91 C82 C73 C64 C55 =89,故选(C)。
解法2:递推法:设走n级有a n 种走法,这些走法可按第一步来分类,第一类:第一步是一步一级,则余下的n 1级有a n 1种走法;第二类:第一步是一步两级,则余下的n 2级有a n 2种走法,所以a n a n 1 a n 2 ,又易得a1 1,a2 2 ,由递推可得a10 89 ,故选(C)。
显然,递推法的关键是按照某种标准找出递推关系式,并求出n 取第一个值(或前几个值)时的各项,然后代入递推关系式,求出题中要求的值。
当然,我们也可以由找出的递推关系,求出通项a n ,但对于选择填空题,我们不必大动干戈的去求通项,因为这样太浪费时间与精力。
2 更列问题把n(n N )个元素排成一列,所有元素各有一个不能占据的指定位置,且不同元素不能占据的指定位置也不同,我们把满足这种条件的一个排列叫做这些元素的一个更列。
04.递推算法(C++版包括习题参考答案)

s 1=
(n i ) * (m i )
2.长方形和正方形的个数之和s 宽为1的长方形和正方形有m个,宽为2的长方形和正方形有 m-1个,┉┉,宽为m的长方形和正方形有1个; 长为1的长方形和正方形有n个,长为2的长方形和正方形有n1个,┉┉,长为n的长方形和正方形有1个; 根据乘法原理
【参考程序】 #include<iostream> using namespace std; int main() { int f[1001][2],n,i,x; cin>>n; f[1][1]=1;f[1][0]=9; for(i=2;i<=n;i++) { x=f[1][0]; if(i==n)x--; f[i][0]=(f[i-1][0]*x+f[i-1][1])%12345; f[i][1]=(f[i-1][1]*x+f[i-1][0])%12345; } cout<<f[n][0]; return 0; }
下面是输入n,输出x1~xn的c++程序: #include<iostream> using namespace std; int main() { int n,i,j,a[101]; cout<<"input n:"; //输入骨牌数 cin>>n; a[1]=1;a[2]=2; cout<<"x[1]="<<a[1]<<endl; cout<<"x[2]="<<a[2]<<endl; for (i=3;i<=n;i++) //递推过程 { a[i]=a[i-1]+a[i-2]; cout<<"x["<<i<<"]="<<a[i]<<endl; } } 下面是运行程序输入 n=30,输出的结果: input n: 30 x[1]=1 x[2]=2 x[3]=3 ........ x[29]=832040 x[30]=1346269
04.递推算法(C++版包括习题参考答案)

【例6】过河卒(Noip2002) 【问题描述】 棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向 下、或者向右。同时在棋盘上的任一点有一个对方的马(如C点),该马 所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点 和P1,„„,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点 (0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给 出的,C≠A且C≠B。现在要求你计算出卒从A点能够到达B点的路径的条数。
min{m , n}1 i 0
s 1=
(n i ) * (m i )
2.长方形和正方形的个数之和s 宽为1的长方形和正方形有m个,宽为2的长方形和正方形有 m-1个,┉┉,宽为m的长方形和正方形有1个; 长为1的长方形和正方形有n个,长为2的长方形和正方形有n1个,┉┉,长为n的长方形和正方形有1个; 根据乘法原理
【例3】棋盘格数
设有一个N*M方格的棋盘( l≤ N≤100,1≤M≤100)。求出该棋盘中包含有多少 个正方形、多少个长方形(不包括正方形)。 例如:当 N=2, M=3时: 正方形的个数有8个:即边长为1的正方形有6个;边长为2的正方形有2个。 长方形的个数有10个:即2*1的长方形有4个:1*2的长方形有3个:3*1的长 方形有2个:3*2的长方形有1个: 程序要求:输入:N,M 输出:正方形的个数与长方形的个数 如上例:输入:2 3 输出:8 10 【算法分析】 1.计算正方形的个数s1 边长为1的正方形个数为n*m 边长为2的正方形个数为(n-1)*(m-1) 边长为3的正方形个数为(n-2)*(m-2) ………… 边长为min{n,m}的正方形个数为(m-min{n,m}+1)*(n-min{n,m}+1) 根据加法原理得出
递推求解new课件

F(n)=F(n-1)+F(n-2)+F(n-4) (n>3)
然后就是对n<=3 的一些特殊情况的处理了, 显然:
F(0)=1 (没有人也是合法的,这个可以特殊 处理,就像0的阶乘定义为1一样) F(1)=1 F(2)=2 F(3)=4
9 2019/10/18
Fibnacci 数列:
即:1、2、3、5、8、13、21、34…
10 2019/10/18
思考:
递推公式的伟大意义——? 有了公式,人工计算的方法? 常见的编程实现方法?(优缺点?)
11 2019/10/18
简单思考题:
在一个平面上有一个圆和n条直 线,这些直线中每一条在圆内 同其他直线相交,假设没有3条 直线相交于一点,试问这些直 线将圆分成多少区域。
如果所坐的不是5人而是n人,写出第n 个人的年龄表达式。
5 2019/10/18
显然可以得到如下公式:
化简后的公式: F(n)=10+(n-1)*2
6 2019/10/18
再来一个简单题:
7 2019/10/18
再来一个简单题:
蟠桃记
8 2019/10/18
递推公式?
F(n)=(F(n-1)+1)*2
仔细阅读,耐心品味,关键掌握从n-1到 n的推导过程。
35 2019/10/18
Any question?
36 2019/10/18
HDOJ作业:
一、课后在线练习: 《ACM Programming》Exercise(3)
二、相关题目: 1290 献给杭电五十周年校庆的礼物 1297 Children’s Queue 1438 钥匙计数之一 1465 ~1466 1480 钥匙计数之二 2013 蟠桃记 2018 母牛的故事 2041~2042 2044~2050 (10/5专题练习)
高中数学解递推数列的方法和实例分析

高中数学解递推数列的方法和实例分析在高中数学中,递推数列是一种常见且重要的数列类型。
通过递推数列的解题,可以培养学生的逻辑思维能力和数学推理能力。
本文将介绍高中数学解递推数列的方法,并通过具体的题目进行分析和说明。
一、递推数列的定义和性质递推数列是指通过前一项或前几项来确定后一项的数列。
常见的递推数列有等差数列、等比数列和斐波那契数列等。
解题时,我们需要找到递推数列的递推关系,即通过前一项或前几项的数值关系来确定后一项的数值。
以等差数列为例,其递推关系为:an = an-1 + d,其中an表示第n项,d表示公差。
我们可以通过这个递推关系来求解等差数列中任意一项的数值。
二、递推数列的求解方法1. 直接法直接法是指通过递推关系式直接求解递推数列中任意一项的数值。
例如,已知等差数列的首项a1=2,公差d=3,求第n项an的值。
根据递推关系an = an-1 + d,我们可以得到an = a1 + (n-1)d。
代入已知条件,可以得到an = 2 + (n-1)3 = 3n-1。
因此,第n项an的值为3n-1。
2. 通项公式法通项公式法是指通过求递推数列的通项公式来求解递推数列中任意一项的数值。
对于等差数列和等比数列,我们可以通过已知的首项和公差(或公比)来推导出通项公式。
以等差数列为例,已知首项a1和公差d,我们可以通过求解递推关系式得到通项公式an = a1 + (n-1)d。
例如,已知等差数列的首项a1=2,公差d=3,求第n项an的值。
根据通项公式,我们可以得到an = 2 + (n-1)3 = 3n-1。
因此,第n项an的值为3n-1。
3. 递推法递推法是指通过已知的前几项来逐步推导出后面的项的数值。
递推法常用于求解斐波那契数列等特殊的递推数列。
以斐波那契数列为例,已知前两项为1,1,求第n项的值。
根据递推关系式,我们可以得到an = an-1 + an-2。
通过逐步推导,可以得到斐波那契数列的前几项如下:1, 1, 2, 3, 5, 8, 13, 21, ...通过递推法,我们可以逐步计算出斐波那契数列的每一项的值。
递推分析解题思路

递推分析解题思路递推算法给定⼀个数的序列H0,H1,…,Hn,…若存在整数n0,使当n>n0时,可以⽤等号(或⼤于号、⼩于号)将Hn与其前⾯的某些项Hi(0<i<n)联系起来,这样的式⼦就叫做递推关系。
递推算法是⼀种简单的算法,即通过已知条件,利⽤特定关系得出中间推论,直⾄得到结果的算法。
递推算法分为顺推和逆推两种。
相对于算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,⽽直接从边界出发,直到求出函数值.⽐如阶乘函数:f(n)=n*f(n-1)在f(3)的运算过程中,递归的数据流动过程如下:f(3){f(i)=f(i-1)*i}-->f(2)-->f(1)-->f(0){f(0)=1}-->f(1)-->f(2)--f(3){f(3)=6}⽽递推如下:f(0)-->f(1)-->f(2)-->f(3)由此可见,递推的效率要⾼⼀些,在可能的情况下应尽量使⽤递推.但是递归作为⽐较基础的算法,它的作⽤不能忽视.所以,在把握这两种算法的时候应该特别注意。
顺推法所谓顺推法是从已知条件出发,逐步推算出要解决的问题的⽅法叫顺推。
如斐波拉契数列,设它的函数为f(n),已知f(1)=1,f(2)=1;f(n)=f(n-2)+f(n-1)(n>=3,n∈N)。
则我们通过顺推可以知道,f(3)=f(1)+f(2)=2,f(4)=f(2)+f(3)=3……直⾄我们要求的解。
逆推法所谓逆推法从已知问题的结果出发,⽤迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为逆推。
递推算法的经典例⼦【案例】从原点出发,⼀步只能向右⾛、向上⾛或向左⾛。
恰好⾛N步且不经过已⾛的点共有多少种⾛法?样例输⼊:N=2样例输出:result=7样例输⼊:N=3样例输出:result=17解题思路:要解决⾛N步共有多少种⾛法,我们在拿到题⽬的时候最直接的想法就是先画出当N=1、N=2、N=3。
递推算法分析课件

定义与特点
定义
递推算法是一种通过已知信息逐步推 导出其他信息的方法,通常从一个初 始状态出发,按照一定的规则逐步推 导出最终结果。
特点
递推算法具有明确性、可计算性和可 实现性,能够根据已知信息逐步推导 出结果,适用于解决一些具有规律性 的问题。
递推算法的分类
线性递推
根据已知的线性关系式,逐步推导出最终结果, 如等差数列求和等。
研究如何提高递推算法的稳定 性,减少初始值对结果的影响
,提高结果的可靠性。
探索新的应用场景
挖掘递推算法在其他领域的应 用潜力,如物理、化学、生物 等学科中的复杂问题求解。
REPORT
THANKS
感谢观看
CATALOG
DATE
ANALYSIS
SUMMAR Y
O(2^n)等。
03
递推算法时间复杂度分析
递推算法的时间复杂度取决于递推关系的复杂度和递归深度。通过分析
递推关系,可以估算算法的时间复杂度,并比较不同算法的效率。
空间复杂度
1 2 3
空间复杂度定义
空间复杂度是衡量算法所需存储空间随输入规模 增长而增长的量级,也用大O表示法表示。
递归与堆栈空间
递归算法需要使用堆栈来保存递归过程中的状态 ,因此其空间复杂度通常较高。迭代算法则通常 只需少量额外空间。
要点二
详细描述
杨辉三角是一个由数字组成的三角形,每个数字是它正上 方和左上方的两个数字之和。从第二行开始,每个数字都 是上一行相邻两个数字之和。通过递推关系式,我们可以 依次生成每个数字,最终得到完整的杨辉三角。
插入排序算法的改进
总结词
插入排序算法是一种简单的排序算法,通过将元素逐个 插入到已排序序列中实现排序。