递归的定义:一个直接或间接调用自己的函数。(每个递归函数都必须有一个终止条件,否则便会永远调用自己而无法退出)
可以看见,最下面的f(x)是最后调用的,但它是第一个运行结束并返回的,然后到上一个f(x),一直到最后才是第一个f(x),符合栈的后进先出。
递归的一个例子:斐波那契数列的实现
问题:如果兔子在出生两个月后,就具有繁殖能力,一对兔子每个月能生一对兔子,那么一年后可以繁殖多少对兔子?
从图中可以知道,兔子每月的数量符合斐波那契数列(前两个数相加等于后一个数)
再结合递归的图:
可以确定递归函数要调用自己多少次,一年=12个月,12次。(兔子按月增长)
f(x)实现前两个月的兔子的数量相加并返回相加后的值
终止条件:月份小于2,如果等于1,返回1,如果等于0,返回0。
代码实现:
执行过程:写简单一点,i=4。
数学形式:
Fbi(4)=Fbi(3)+Fbi(2) //调用Fbi(3)和Fbi(2)
Fbi(3)=Fbi(2)+Fbi(1) //调用Fbi(2)和Fbi(1)
Fbi(2)=Fbi(1)+Fbi(0) //调用Fbi(1)和Fbi(0)
Fbi(1)=1 (i<2且i != 0)终止条件,开始返回
Fbi(0)=0 (i<2且i==0)终止条件,开始返回
总式:
Fbi(4) = Fbi(3)+Fbi(2)
=2Fbi(2)+Fbi(1)
=3Fbi(1)+2Fbi(0)
=3×1+2×0
=3