递归方程求解方法综述

合集下载

递归方程求解方法综述

递归方程求解方法综述

递归方程求解方法综述递归方程是数学中常见的一种表示方式,它描述了一个数列或函数之间的递推关系。

递归方程求解方法是指寻找递归方程的解析解或近似解的过程。

在许多应用领域,递归方程都是非常重要的,例如在计算机科学、自然科学及经济学等各个领域。

本文将从递归方程的求解方法综述入手,介绍常见的求解方法,包括代入法、特征根法、母函数法等,并举例说明其应用。

一、代入法代入法是求解递归方程的常见方法之一、它的基本思想是通过猜测法求得递归方程的解的形式,然后通过代入递归方程验证该猜测解是否成立。

如果成立,我们就可以得到递归方程的解析解;如果不成立,我们需要修改猜测解的形式,重复上述过程直到找到正确的解。

例如,考虑递推关系式$f(n) = 2f(n-1) + 3$,其中$f(0)=1$。

我们首先猜测$f(n) = a\cdot 2^n + b$,代入递推关系式可得:$a\cdot 2^n + b = 2(a\cdot 2^{n-1} + b) + 3$。

整理得$a\cdot 2^n + b = 2a\cdot 2^{n-1} + 2b + 3$。

化简可得$a\cdot 2^{n-1} = 2b + 3$。

由此可知,$b = \frac{a\cdot 2^{n-1} - 3}{2}$。

将$b$的值代入原方程得到$a\cdot 2^n + \frac{a\cdot 2^{n-1} - 3}{2} = 2(a\cdot2^{n-1} + \frac{a\cdot 2^{n-1} - 3}{2}) + 3$。

进一步化简可得$a = 6$。

因此,递归方程的解析解为$f(n) =6\cdot 2^n + \frac{3}{2}(2^n - 1)$。

二、特征根法特征根法是求解线性递归方程的常用方法。

这种方法基于线性递归方程的特征方程和特征根的性质,通过求解特征方程的根来得到递归方程的解析解。

考虑递归关系式$f(n) = af(n-1) + b$,其中$f(0)=c$。

求解递归式的方法

求解递归式的方法

求解递归式的方法递归式是计算机科学中常见的数学表示方法,用于描述一个函数或算法在运行过程中自我调用的特性。

在求解递归式时,我们希望找到一个封闭的表达式,从而得到问题的解析解。

本文将介绍几种常见的求解递归式的方法。

一、递归展开法递归展开法是求解递归式的一种常用方法。

它的基本思想是将递归式进行展开,直到得到一个不再含有递归项的等式。

通过这种方式,我们可以得到递归式的解析解。

例如,考虑递归式T(n) = T(n-1) + n,其中T(1) = 1。

我们可以使用递归展开法来求解这个递归式。

将递归式展开一次,得到T(n) = T(n-2) + (n-1) + n。

接着,再次展开,得到T(n) = T(n-3) + (n-2) + (n-1) + n。

继续展开,我们可以得到T(n) = T(n-k) + (n-k+1) + (n-k+2) + ... + (n-1) + n。

当展开到T(n) = T(1) + 2 + 3 + ... + (n-1) + n时,我们可以发现这个式子等于等差数列的和,即T(n) = 1 + 2 + 3 + ... + (n-1) + n。

利用等差数列求和公式,我们可以得到T(n) = (n+1)*n/2。

因此,递归式T(n) = T(n-1) + n的解析解为T(n) = (n+1)*n/2。

二、主定理主定理是求解递归式的另一种常用方法。

它适用于一类常见的递归式,即形如T(n) = aT(n/b) + f(n)的递归式。

其中,a是递归式中递归调用的次数,b是递归式中问题规模的缩小比例,f(n)是递归式中除了递归调用外的其他操作。

主定理的基本思想是通过比较递归式中不同部分的增长速度,判断递归式的解析解的形式。

主定理的具体表述如下:设递归式T(n) = aT(n/b) + f(n),其中a≥1,b>1,f(n)是一个非负函数。

1. 如果存在一个常数ε>0,使得f(n) = O(n^log_b(a-ε)),则T(n) = Θ(n^log_b(a))。

递归数列通项公式的求法

递归数列通项公式的求法

递归数列通项公式的求法确定数列的通项公式,对于研究数列的性质起着至关重要的作用。

求递归数列的通项公式是解决数学竞赛中有关数列问题的关键,本文着重对递归数列通项公式加以研究。

基础知识定义:对于任意的*N n ∈,由递推关系),,,(21k n n n n a a a f a ---= 确定的关系称为k 阶递归关系或称为k 阶递归方程,由k 阶递归关系及给定的前k 项k a a a ,,,21 的值(称为初始值)所确定的数列称为k 阶递归数列。

若f 是线性的,则称为线性递归数列,否则称为非线性递归数列,在数学竞赛中的数列问题常常是非线性递归数列问题。

求递归数列的常用方法:一.公式法(1)设}{n a 是等差数列,首项为1a ,公差为d ,则其通项为d m n a a m n )(-+=;(2)设}{n a 是等比数列,首项为1a ,公比为q ,则其通项为m n m n q a a -=; (3)已知数列的前n 项和为n S ,则)2()1(11≥=⎩⎨⎧-=-n n S S S a n nn 。

二.迭代法迭代恒等式:112211)()()(a a a a a a a a n n n n n +-++-+-=--- ;迭乘恒等式: 112211a a a a a a a a n n n n n ⋅⋅⋅⋅=--- ,(0≠n a ) 迭代法能够解决以下类型一和类型二所给出的递推数列的通项问题:类型一:已知)(,11n f a a b a n n +==+,求通项n a ;类型二:已知n n a n f a b a )(,11==+,求通项n a ;三.待定系数法类型三:已知)1(,11≠+==+p q pa a b a n n ,求通项n a ;四.特征根法类型四:设二阶常系数线性齐次递推式为n n n qx px x +=++12(0,,1≠≥,q q p n 为常数),其特征方程为q px x +=2,其根为特征根。

递归算法详解完整版

递归算法详解完整版

递归算法详解完整版递归算法是一种重要的算法思想,在问题解决中起到了很大的作用。

它通过将一个大问题划分为相同或类似的小问题,并将小问题的解合并起来从而得到大问题的解。

下面我们将详细介绍递归算法的定义、基本原理以及其应用。

首先,我们来定义递归算法。

递归算法是一种通过调用自身解决问题的算法。

它通常包括两个部分:基础案例和递归步骤。

基础案例是指问题可以被直接解决的边界情况,而递归步骤是指将大问题划分为较小问题并通过递归调用自身解决。

递归算法的基本原理是"自顶向下"的思维方式。

即从大问题出发,不断将问题划分为较小的子问题,并解决子问题,直到达到基础案例。

然后将子问题的解合并起来,得到原始问题的解。

递归算法的最大特点是简洁而优雅。

通过将复杂问题分解为简单问题的解决方式,可以大大减少代码的复杂程度,提高程序的效率和可读性。

但是递归算法也有一些缺点,包括递归深度的限制和复杂度的不确定性。

过深的递归调用可能导致栈溢出,而不合理的递归步骤可能导致复杂度过高。

递归算法有许多应用场景,我们来介绍其中一些典型的应用。

1.阶乘问题:计算一个数的阶乘。

递归算法可以通过将问题划分为更小的子问题来解决。

例如,n的阶乘可以定义为n乘以(n-1)的阶乘。

当n 等于1时,我们可以直接返回1作为基础案例。

代码如下:```int factorial(int n)if (n == 1)return 1;}return n * factorial(n - 1);```2.斐波那契数列问题:求斐波那契数列中第n个数的值。

斐波那契数列的定义是前两个数为1,然后从第三个数开始,每个数都是前两个数的和。

递归算法可以通过将问题划分为两个子问题来解决。

当n等于1或2时,直接返回1作为基础案例。

代码如下:```int fibonacci(int n)if (n == 1 , n == 2)return 1;}return fibonacci(n - 1) + fibonacci(n - 2);```3.二叉树问题:对于给定的二叉树,递归算法可以通过递归调用左子树和右子树的解来解决。

递归方程求解方法综述

递归方程求解方法综述

递归方程求解方法综述摘要:随着计算机科学的逐步发展,各种各样的算法相继出现,我们需要对算法进行分析,以选择性能更好的解决方案。

算法分析中计算复杂度常用递归方程来表达,因此递归方程的求解有助于分析算法设计的好坏。

阐述了常用的3种求解递归方程的方法:递推法、特征方程法和生成函数法。

这3种方法基本上可以解决一般规模递归方程的求解问题。

关键词:递归;递推法;特征方程;生成函数0引言寻求好的解决方案是算法分析的主要目的,问题的解决方案可能不只一个,好的方案应该执行时间最短,同时占有存储空间最小,故算法分析一般考虑时间复杂性、空间复杂性两方面的参数。

在算法分析时我们采用时间耗费函数来表示时间参数,用当问题规模充分大时的时间耗费函数的极限表示时间复杂度。

一般算法对应的时间耗费函数常用递归方程表示,找出递归方程的解,就可以表示其对应算法复杂度的渐进阶,从而比较算法的优劣。

因此研究递归方程的解法意义重大。

下文将分析并给出常用递归方程的3种解法。

1递归方程的解法递归方程是对实际问题求解的一种数学抽象,递归的本质在于将原始问题逐步划分成具有相同解题规律的子问题来解决,原始问题与子问题仅在规模上有大小区别,并且子问题的规模比原始问题的规模要小。

对于规模为n的原始问题,我们通常会寻找规模n的问题与规模n-1或者规模n/2的问题之间存在的联系,从而进一步推导出具有递归特性的运算模型。

根据递归方程的一般形式,常用的解法有三种,分别是递推法、公式法及生成函数法。

下面就分别来分析其求解过程。

1.1递推法当递归方程形式简单且阶数较低时,一般可以采用递推法求解,根据一步一步递推找到方程的递推规律,得到方程的解。

下面举例说明: t(1)=0t(n)=2t(n/2)+n2(n≥2)t(n)=2t(n/2)+n2=2(2t(n/22)+(n/2)2)+n2=22t(n/2)2+2n2/22+n2=22(2t(n/23)+(n/22)2)+2n2/22+n2=23(2t(n/23)+22n2/(22)2)+2n2/(22)1+n2…=2kt(n/2k)+∑k-1i=02in2(22)i递推到这里我们就可以发现递归规律,找到递归出口, t(1)=0,令n=2k 则可以得到如下结果:t(n) =2kt(1) +∑k-1i=0n2(1/2)i)=n2(1-(1/2)k1-1/2)=2n2-2n 上面得到方程的解,我们来分析其对应算法复杂性的渐进阶,根据渐进阶定理有:设有函数f(n),g(n)均是规模n的函数,则o(f(n))+o(g(n))=o(max(f(n), g(n)))。

递归算法步骤

递归算法步骤

递归算法步骤
递归算法是一种通过自身调用来解决问题的算法。

其步骤可以简述为以下几点:
1. 定义递归函数:首先需要定义一个递归函数,该函数负责解决具体的问题。

函数的参数通常包括输入数据和递归所需的其他参数。

2. 设定递归终止条件:在递归函数中,需要设定一个终止条件,当满足这个条件时,递归将停止并返回结果。

这是确保递归不会无限循环的重要部分。

3. 处理基本情况:在递归函数中,需要考虑到一些基本情况,这些情况通常可以直接求解,而不需要继续进行递归。

在这些情况下,可以直接返回结果,从而减少递归的次数。

4. 缩小问题规模:在递归函数中,需要将原始问题划分成更小的子问题。

通过缩小问题规模,可以将原始问题转化为更简单的形式,并且递归地解决这些子问题。

5. 调用递归函数:在递归函数中,需要调用自身来解决子问题。

通过递归调用,可以反复地将问题分解为更小的子问题,直到达到终止条件为止。

6. 整合子问题的解:在递归函数中,需要将子问题的解整合起来,得到原始问题的解。

这通常涉及到对子问题的解进行合并、计算或其他操作。

7. 返回结果:最后,递归函数需要返回结果。

这个结果可
以是最终的解,也可以是在每次递归调用中得到的中间结果。

需要注意的是,在使用递归算法时,要确保递归能够正确地终止,并且要注意避免出现无限递归的情况。

另外,递归算法的效率通常较低,因此在设计算法时要考虑到时间和空间复杂度的问题。

递归算法详解完整版

递归算法详解完整版

递归算法详解标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]递归冯文科一、递归的基本概念。

一个函数、概念或数学结构,如果在其定义或说明内部直接或间接地出现对其本身的引用,或者是为了描述问题的某一状态,必须要用至它的上一状态,而描述上一状态,又必须用到它的上一状态……这种用自己来定义自己的方法,称之为递归或递归定义。

在程序设计中,函数直接或间接调用自己,就被称为递归调用。

二、递归的最简单应用:通过各项关系及初值求数列的某一项。

在数学中,有这样一种数列,很难求出它的通项公式,但数列中各项间关系却很简a与前面临近几项之间的关单,于是人们想出另一种办法来描述这种数列:通过初值及n系。

要使用这样的描述方式,至少要提供两个信息:一是最前面几项的数值,一是数列间各项的关系。

比如阶乘数列1、2、6、24、120、720……如果用上面的方式来描述它,应该是:a的值,那么可以很容易地写成这样:如果需要写一个函数来求n这就是递归函数的最简单形式,从中可以明显看出递归函数都有的一个特点:先处理一些特殊情况——这也是递归函数的第一个出口,再处理递归关系——这形成递归函数的第二个出口。

递归函数的执行过程总是先通过递归关系不断地缩小问题的规模,直到简单到可以作为特殊情况处理而得出直接的结果,再通过递归关系逐层返回到原来的数据规模,最终得出问题的解。

以上面求阶乘数列的函数)f为例。

如在求)3(f时,由于3不是特殊值,因此需(n要计算)2(3f,但)2(f是对它自己的调用,于是再计算)2(f,2也不是特殊值,需要计*算)1(f,返回)1(= 2f,需要知道)1(f的值,再计算)1(f,1是特殊值,于是直接得出1*上一步,得23*)2()3(==f,从而得最终=f)1(32**)2(==f2f,再返回上一步,得6解。

用图解来说明,就是下面再看一个稍复杂点的例子。

【例1】数列}{n a 的前几项为1、111+、11111++、1111111+++、……输入n ,编程求n a 的精确分数解。

求数列递归表达式常用的八种方法

求数列递归表达式常用的八种方法

求数列递归表达式常用的八种方法数列递归是数学中常见且重要的概念之一。

它通过每一项都依赖于前一项的方式进行定义。

本文将介绍八种常用的方法来求解数列递归表达式。

1. 迭代法:迭代法是一种基本且直观的求解数列递归的方法。

它通过循环的方式逐步计算每一项的值,并存储在一个数组或列表中。

迭代法的时间复杂度通常为O(n),其中n为数列的项数。

迭代法:迭代法是一种基本且直观的求解数列递归的方法。

它通过循环的方式逐步计算每一项的值,并存储在一个数组或列表中。

迭代法的时间复杂度通常为O(n),其中n为数列的项数。

2. 通项公式法:通项公式法是一种利用数列特点来求解数列递归的方法。

通过观察数列的规律和特点,可以推导出一个通项公式,从而直接计算任意项的值。

通项公式法的优势在于可以快速计算出数列的任意项,但前提是需要发现数列的规律。

通项公式法:通项公式法是一种利用数列特点来求解数列递归的方法。

通过观察数列的规律和特点,可以推导出一个通项公式,从而直接计算任意项的值。

通项公式法的优势在于可以快速计算出数列的任意项,但前提是需要发现数列的规律。

3. 递推关系法:递推关系法通过定义递推关系式来求解数列递归。

递推关系式是指数列的每一项与前一项之间的关系式。

通过逐项求解递推关系式,可以计算出数列的每一项的值。

递推关系法:递推关系法通过定义递推关系式来求解数列递归。

递推关系式是指数列的每一项与前一项之间的关系式。

通过逐项求解递推关系式,可以计算出数列的每一项的值。

4. 求和法:有些数列的递归关系可以通过求和公式来求解。

求和法通过将数列的每一项进行求和,从而得到数列的递归表达式。

这种方法常用于等差数列或等比数列。

求和法:有些数列的递归关系可以通过求和公式来求解。

求和法通过将数列的每一项进行求和,从而得到数列的递归表达式。

这种方法常用于等差数列或等比数列。

5. 向前递推法:向前递推法是通过已知数列的第一项和递推关系式来逐项计算数列的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

递归方程求解方法综述
摘要:随着计算机科学的逐步发展,各种各样的算法相继出现,我们需要对算法进行分析,以选择性能更好的解决方案。

算法分析中计算复杂度常用递归方程来表达,因此递归方程的求解有助于分析算法设计的好坏。

阐述了常用的3种求解递归方程的方法:递推法、特征方程法和生成函数法。

这3种方法基本上可以解决一般规模递归方程的求解问题。

关键词:递归;递推法;特征方程;生成函数
0引言
寻求好的解决方案是算法分析的主要目的,问题的解决方案可能不只一个,好的方案应该执行时间最短,同时占有存储空间最小,故算法分析一般考虑时间复杂性、空间复杂性两方面的参数。

在算法分析时我们采用时间耗费函数来表示时间参数,用当问题规模充分大时的时间耗费函数的极限表示时间复杂度。

一般算法对应的时间耗费函数常用递归方程表示,找出递归方程的解,就可以表示其对应算法复杂度的渐进阶,从而比较算法的优劣。

因此研究递归方程的解法意义重大。

下文将分析并给出常用递归方程的3种解法。

1递归方程的解法
递归方程是对实际问题求解的一种数学抽象,递归的本质在于将原始问题逐步划分成具有相同解题规律的子问题来解决,原始问题与子问题仅在规模上有大小区别,并且子问题的规模比原始问题的
规模要小。

对于规模为n的原始问题,我们通常会寻找规模n的问题与规模n-1或者规模n/2的问题之间存在的联系,从而进一步推导出具有递归特性的运算模型。

根据递归方程的一般形式,常用的解法有三种,分别是递推法、公式法及生成函数法。

下面就分别来分析其求解过程。

1.1递推法
当递归方程形式简单且阶数较低时,一般可以采用递推法求解,根据一步一步递推找到方程的递推规律,得到方程的解。

下面举例说明: t(1)=0
t(n)=2t(n/2)+n2(n≥2)
t(n)=2t(n/2)+n2=2(2t(n/22)+(n/2)2)+n2
=22t(n/2)2+2n2/22+n2
=22(2t(n/23)+(n/22)2)+2n2/22+n2
=23(2t(n/23)+22n2/(22)2)+2n2/(22)1+n2…
=2kt(n/2k)+∑k-1i=02in2(22)i递推到这里我们就可以发现递
归规律,找到递归出口, t(1)=0,令n=2k 则可以得到如下结果:t(n) =2kt(1) +∑k-1i=0n2(1/2)i)=
n2(1-(1/2)k1-1/2)=2n2-2n 上面得到方程的解,我们来分析其对应算法复杂性的渐进阶,根据渐进阶定理有:设有函数f(n),g(n)均是规模n的函数,则o(f(n))+o(g(n))=o(max(f(n), g(n)))。

故有t(n)=o(n2)。

1.2公式法
对所需求解的递归方程进行观察,如果它是符合以下形式的常系数齐次线性方程,可用公式法求解。

f(0)=b0;
f(1)=b1;……
f(k-1)=bk-1;
f(n)=a1f(n-1)+a2f(n-2)+…+akf(n-k) 在此,常系数是指a1 、a2、……ak是常数,线性指所有的f均为一次幂,齐次指无常数项。

解这类方程,可由f(n)项得出:f (n)-a1f(n-1)-a2f(n-2)-…
-akf(n-k) =0;寻找形如f(n)= xn的解。

令xn-a1xn-1-a2xn-2-…-akxn-k=0;xn-k(xk-a1xk-1-…-ak) =0;即xk-a1xk-1-…-ak =0;
由此,我们得到了这类递归方程的特征方程,它有n个特征根,设为x1,x2,…,xk;其线性组合是f(n)的通解。

即c1x1n+c2x2n+…+ckxkn=f(n);其中c1,c2,…,ck可由k个初始条件得到的线性方程组解出。

例如,常系数齐次线性方程组f(0)=0;
f(1)=1;
f(n)=4f(n-2);(n>1) 令f(n)=xn;则xn =4xn-2;
xn - 4xn-2=0 ;
x2-4=0;(特征方程)
x1=2;x2=-2;(特征根)
设有c1,c2使f (n) =c1x1n+c2x2n;
由初始条件 f(0)
=c1x10+c2x20=c1+c2=0;f(1)=c1x11+c2x21=2c1-2c2=1;即
c1+c2=0;
2c1-2c2=1解得c1=1/4;c2=-1/4;
∴f(n)=2n/4-(-2)n/4即为以上递归方程的解。

1.3生成函数法
第三种方法是利用生成函数的方法,即已知一个数列
a0,a1,a2,…,an,定义它的生成函数为一个形式幂级数:
f(x)=a0+a1x1+a2x2+…+anxn+…
我们寻找an的代数式。

有了生成函数f(x),无需知道
a0,a1,a2,…,an 的各项就可以设法找出它的生成函数的解析式,再将其展开成一个幂级数,则xn项的系数即为要求得的an。

以汉诺(hanoi)塔问题的递归方程为例:t(1)=1;
t(n)=2t(n-1)+1;(n≥2) 该序列的生成函数为:
t(x)=t(1)x+t(2)x2+t(3)x3+…+t(n)xn+…(1)下面求t(n)的解析式。

由递归方程可得:t(2)-2t(1) =1;
t(3)-2t(2)=1;
t(4)-2t(3)=1;
……
t(n+1)-2t(n)=1将(1)式×2x得:2xt(x)=2t(1)x2+2t(2)x3+ 2t(3)x4+…+2t(n)xn+1+…(2)(1)式-(2)式得,t(x) -2xt(x)= t(1)x+x2+x3+…+xn+…(1-2x)t(x)= x+x2+x3+…+xn+…
t(x)= = x1-x1-2x=x(1-x)(1-2x)设
t(x)=a1-x+b1-2x=a(1-2x)+b(1-x)(1-x)(1-2x)=(a+b)-(2a+b)x(1 -x)(1-2x)
应有x=(a+b) - (2a+b)x
则a+b=0;
2a+b=-1解得a=-1;b=1
即t(x)=-11-x+11-2x
用幂级数展开,得:t(x) = (1+2x+22x2+23x3+...
+2nxn+...) - (1+x+x2+…+xn+…)
= (2-1) x+ (22-1) x2+ (23-1) x3+
…+ (2n-1) xn+…∴解出an=2n-1;
在设定生成函数后,在求解解析式的过程中,需要消去中间的多余项,这就需要观察递归方程,上例中是采取了乘以一个系数相减的方法,在遇到具体问题时,可采取不同的方法,比如移位、乘法、甚至求导,以求出要找的解析式。

2结束语
在算法设计中,很多问题可以采用递归解决。

递归的引入往往使某些函数的定义和算法的描述更加清晰、明了。

而且,递归对于一些用非递归无法完全描述的复杂函数和过程也能清楚地进行表达。

根据递归方程的解的形式可以评价一个算法的时间复杂度,从而可以直接判断算法的优劣,因此递归方程求解在算法设计中至关重要。

本文给出了3种求解递归方程的方法,采用这些方法就可解决
一般的递归方程,对于递归方程的学习有十分重要的指导意义。

参考文献:
[1]胡章平,王瑞胡.算法时间复杂度分析中递归方程求解方法综述[j].中国科技信息,2006(3).
[2]高见元.递归方程的分析[j].中国高新技术企业 2007(13).
[3]武继刚.关于递归方程t(n)=a[1].t(n/c)+d(n)的一般解[j].兰州大学学报(自然科学版),1989(4).
[4]孙红丽,叶斌.浅析递归方程解法及其渐进阶表示[j].四川文理学院学报(自然科学版),2007(2).
[5]王晓东.计算计算法设计与分析[m].北京:清华大学出版社,2008.。

相关文档
最新文档