用栈明白递归原理

用栈明白递归原理

递归:如果在一个函数、过程或数据结构的定义又应用了它自身,那么这个函数、过程或数据结构称是递归定义的,简称递归。递归最重要的是递归式和递归边界。

简化说明:

@一个函数调用自己

@函数中有终止条件

@通过符号来连接返回的函数

用栈解释: 斐波那契数列

int f(n){
    if(n==0){
    return 0;
    }
    if(n==1){
    return 1;
    }
    else{
	return f(n-1)+f(n-2);
    }
}

运用递归的时候,系统会有一个函数栈存储函数返回值,符号,局部变量等。

推理:假设n=5,

入栈:

第一步:f(5)入栈

第二步:f(4)入栈 f(3)入栈 “+”入栈

第三步:f(3)入栈 f(2)入栈 “+”入栈” f(2)入栈 f(1)入栈 “+”入栈

第四步:f(2)入栈 f(1)入栈 “+”入栈 f(1)入栈 f(0)入栈 “+”入栈” f(1)入栈 f(0)入栈 “+”入栈 f(0)入栈 1入栈 “+”入栈

第五步:f(1)入栈 f(0)入栈 f(0) 入栈 1入栈 “+”入栈 1入栈 0入栈 “+”入栈 1入栈 0入栈 “+”入栈 0入栈 1入栈 “+”入栈

出栈:

第一步栈顶为 f(2)=0+1=1

第二步栈顶为 f(3)=1+1=2

第三步栈顶为 f(4)=1+2=3

第四步栈顶为 f(5) =2+3=5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值