请编程同志解释一下这句话:大部分函数的递归形式比非递归形式运行速度要慢,这是因为编译器使用栈来实现。

什么是栈????... 什么是栈???? 展开
 我来答
百度网友b9ae3d5
2013-01-27 · TA获得超过232个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:91.8万
展开全部
打个比方,栈是一个类似于桶的东西,先进桶的东西,会被压在桶底,后面放的东西会放在桶面。每次函数的调用都会产生另外的开销,一个父函数调用子函数时候,会先在寄存器保存父函数的当前状态,包括当前指令地址信息,也就是类似于将这些信息先放桶底部,然后再将子函数参数等信息再继续放入桶里,也就是桶面,子函数执行结束后,会将刚才为了执行子函数放入桶里的信息出栈,桶里就露出了一开始保存在桶底的父函数的下一个指令地址(桶底变成桶面了),这时候再将这个指令取出继续往后执行。因为每次函数的调用都有类似的进栈出栈操作,而递归就是函数本身调用自己,当然也会产生类似的进栈出栈操作,产生另外的开销。
而非递归时候,也就是迭代时候,是在同一个函数内部进行的循环操作,没有另外调用子函数产生的开销,所以大部分情况下非递归形式要比递归形式速度稍快。另外递归消耗的内存也要比迭代多,因为在不同递归层数里面定义的变量都需要另外分配内存,不像非递归只定义一次,只分配一次。
百度网友26ad406
2013-01-27 · TA获得超过1611个赞
知道大有可为答主
回答量:1506
采纳率:100%
帮助的人:1107万
展开全部
栈是先进后出的一种线性表 是一种数据结构
你说的那个相当于是用栈保存函数调用中的信息 比如主调函数中的变量 位置代码等 等调用的函数执行完把栈顶元素即保存的信息恢复
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式