1.4.2 递归设计
递归(Recursion)也是实现重复性计算的一种方法,是指一个过程或函数在定义中直接或间接调用自身的一种方法。递归设计的关键在于找出递归关系(方程)和递归终止(边界)条件。递归关系就是使问题向边界条件转化的规则。一般而言,递归关系必须能使问题越来越简单,规模越来越小。递归终止条件就是所描述问题最简单的、可解的情况,不需要再继续递归或推导下去。

用递归解题通常有三个步骤。
(1)分析问题找到递归关系:找出大规模问题与小规模问题的关系,以便通过递归使问题规模变小。
(2)设置终止条件控制递归:通过停止条件的设置,找出可解的最小规模问题。
(3)设计函数确定数据传递方式。
【例1-5】 运用递归方式设计求解斐波那契数列(Fibonacci sequence)的第n项的值。
计算模型
斐波那契数列求解是非常经典的算法,它的推导公式就展现了递归的终止条件和递归方程,如下式所示:

其中,式(1-15)是递归方程,式(1-14)是终止条件。
算法分析
依据计算模型,容易得知,求第n项的值需要计算n-2次,所以主体算法计算次数约为f(n)=n-2。
算法实现
int fcc(int n) { int t; if (n==1||n==2) { return 1; } else return fcc(n - 1)+fcc(n - 2); } void main() { int n; printf("input n:"); scanf("%d",&n); printf("No.%d value of Fibonacci sequence is %d\n",n,fcc(n)); }