文章目录
前言
主要探究递推和递归之间的关系
提示:以下是本篇文章正文内容,本人可能有理解不到位的地方,请批评指正。
一、递推原理
1.递推概念
指从已知条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。
2.递推关系
指一个问题的结果与其子问题的结果之间的关系。
3.递推特点
可用递推算法求解的题目一般有以下两个特点:
1)问题可以划分成多个状态;
2)除初始状态外,其它各个状态都可以用固定的递推关系式表示。
4.递推详例
帕斯卡三角形是排列成三角形的一系列数字。在帕斯卡三角形中,每一行的最左边和最右边的数字总是1。对于其余的每个数字都是前一行中直接位于它上面的两个数字之和。
首先,我们定义一个函数 f(i,j),它将会返回帕斯卡三角形第i行、第j列的数字。然后,我们可以用下面的公式来表示这一递推关系:f(i,j)=f(i−1,j−1)+f(i−1,j)。
5.解决递推问题的步骤
1)建立递推关系式;(问题可以划分成多个状态;除初始状态外,其它各个状态都可以用固定的递推关系式来表示。实际解题中,题目不会直接给出递推关系式,而是需要通过分析各种状态,找出递推关系式。)
2)确定边界条件;
3)递推求解。
二、递归原理
1.递归的概念
递归指的是在函数的定义中使用函数自身的方法。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。递归函数在解决许多数学问题上起了至关重要的作用,比如计算一个数的阶乘、生成斐波那契数列等。
2.构成递归的条件
1)子问题须与原始问题为同样的事,且更为简单;
2)具有终止条件,也就是递归不能无限制地调用本身,须有个出口,化简为非递归状况处理。并且终止条件必须是在递归最开始的地方。
3.递归的模板
1.void recursion()
2.{
3. statements;
4. ... ... ...
5. recursion(); /* 函数调用自身 */
6. ... ... ...
7.}
8.
9.int main()
10.{
11. recursion();
12.}
4.递归详例
(1)问题描述
斐波那契数列:1、1、2、3、5、8、13、21…,即第一项 f(1) = 1,第二项 f(2) = 1…,第 n 项目为 f(n) = f(n-1) + f(n-2)。求第 n 项的值是多少。
(2)问题分析
1)先确定f(n)的功能是求第n项的值;
2)当 n = 1或者 n = 2 ,我们可以轻易地知道结果f(1)=f(2)=1。所以递归结束条件可以为n<= 2 时&