栈的应用(递归)

    递归的定义:一个直接或间接调用自己的函数。(每个递归函数都必须有一个终止条件,否则便会永远调用自己而无法退出)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

    可以看见,最下面的f(x)是最后调用的,但它是第一个运行结束并返回的,然后到上一个f(x),一直到最后才是第一个f(x),符合栈的后进先出。

 

    递归的一个例子:斐波那契数列的实现

    问题:如果兔子在出生两个月后,就具有繁殖能力,一对兔子每个月能生一对兔子,那么一年后可以繁殖多少对兔子?watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

     从图中可以知道,兔子每月的数量符合斐波那契数列(前两个数相加等于后一个数)

 

再结合递归的图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

     可以确定递归函数要调用自己多少次,一年=12个月,12次。(兔子按月增长)

    f(x)实现前两个月的兔子的数量相加并返回相加后的值

终止条件:月份小于2,如果等于1,返回1,如果等于0,返回0。

 

代码实现:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

    执行过程:写简单一点,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值