4.4.2 递归的使用方法

在定义递归函数时,有时会出现死循环、栈溢出等一些错误。为了防止出现此类递归错误,需要理解递归的特性,比如,在定义递归函数时,函数必须有一个明确的结束条件,这样才不会出现死循环;而在每次进入更深一层的递归时,这个递归所解决问题的规模相比上次递归所解决问题的规模应有所减小;递归的效率不高,递归层次过多会导致栈溢出。这是因为在计算机中,函数调用是通过栈这种数据结构实现的,每当进入一个函数调用时,栈就会加一层栈帧;每当函数返回时,栈就会减一层栈帧。由于栈的大小不是无限的,因此,递归调用的次数过多,就会导致栈溢出。

【范例4-12】递归函数的经典案例——斐波那契数列:1,1,2,3,5,8,13,21,…。从这个数列的第三项开始,每一项都等于前两项之和。通过递归函数来实现它。代码如下:

运行程序,输出结果如下:

注意

在实际使用中,递归函数由于消耗时间比较长(相比于for和while循环),所以很少使用。