递推与递归的区别

一、递推算法:

递推算法是一种顺序递推的数学关系模型算法,好比通项公式。在数值计算的过程之中,只需要知道递推的边界值(一般是初值),也就是最开始的原始数值,然后类推,直到求出第n项数值,也就是目标值为终点。

二、递归算法:

递归算法:在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归算法实际上是一种调用自己的一种函数(递归函数),它往往从结果出发,每一次函数的调用都是从函数结果和当前传入值相关,然后再顺着函数结果的下一个函数结果和当前函数的传入值再次计算,直到最终破除这个调用的界限,即函数结果最终返回的是一个确定的值而不再是这个函数结果的本身调用。

三、递推算法和递归算法的区别:

1、算法的过程不同

递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。

递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。

2、递推与递归的比较相对于递归算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值。

3、两种算法用途不同

递归算法绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言中习惯用递归来实现循环。

而递推算法是给定一个数的序列x₀,x₁,…,xₙ,…若存在整数n0,使当n>n₀时,可以用等号(或大于号、小于号)将xₙ与其前面的某些项xᵢ(0<i<n)联系起来,这样的式子就叫做递推关系。

四、递推算法的特点

一个问题的求解需要大量重复计算,在已知的条件和所求问题之间总存在着某种相互联系的关系,在计算时,我们需要找到这种关系,进行计算(递推关系式)。

递推法的关键,就是找到递推关系式,这种处理方式能够将复杂的计算过程,转化为若干步骤的简单重复运算,充分利用计算机运行程序时的时间局部性和空间局部性。

递推算法的思想:

首要问题是先找到各个相邻数据项之间的递推关系;
递推关系避开了求通项公式的麻烦,且有些题目的通项公式很难求,或者不能进行求解;
将复杂问题分解为若干步骤的简单运算;
一般来说递推算法就是一种特殊的迭代算法。
递推算法解题的基本思路:

将复杂计算转换为简单重复运算;
通过找到递推关系式进行简化运算;
利用计算机的特性,减少运行时间。
递推算法的一般步骤:

根据题目确定数据项,并找到符合要求的递推关系式;
根据递推关系式设计递推程序;
根据题目找到递推的终点;
单次查询可以不进行存储,多次查询都要进行存储;
按要求输出答案即可。
五、递归算法的特点

递归算法是一种从自顶向下的算法,实际上是通过不停的直接调用或者间接的调用自身的函数,通过每次改变变量完成多个过程的重复计算,直到到达边界之后,结束调用。

与递推法相似的是,递归与递推都是将一个复杂过程分解为几个简单重复步骤进行计算。

递归算法的实现的核心是分治策略,即分而治之,将复杂过程分解为规模较小的同类问题,通过解决若干个小问题,进而解决整个复杂问题

递归算法的思想:

将复杂计算过程转换为简单重复子过程;
找到递归公式,即能够将大问题转化为小问题的公式;
自上而下计算,在返回完成递归过程。
递归算法设计的一般步骤:
根据题目设计递归函数中的运算部分;
根据题目找到递归公式,题目可能会隐含给出,也可能需要自己进行推导;
找到递归出口,即递归的终止条件。
———END———

3 个赞

学习一下Markdown排版

2 个赞

Markdown

1 个赞

讲麻烦了,一个是函数自己调用自己,一个是推,例如:斐波那契用 for

不过挺详细的

1 个赞

我也觉得,说的很不清楚

1 个赞

太费劲了,我自己还有点看不懂。。。

dp ,打擂台不是一个东西这里没有注明