线性递归和尾递归

原理介绍

线性递归

线性递归是一种常见的递归形式。在函数调用自身时,会产生一系列的嵌套调用,直到达到递归的终止条件。在递归返回的过程中,每一层递归调用都需要等待其下一层递归调用返回结果后,才能继续执行后续的操作。这意味着在递归调用过程中,会有多个未完成的函数调用栈帧存在于调用栈中,随着递归深度的增加,调用栈的深度也会线性增加,可能会导致栈溢出错误。

尾递归

尾递归是线性递归的一种特殊形式。在尾递归中,递归调用是函数的最后一个操作,即在递归调用返回后,函数没有其他操作需要执行。这使得编译器可以对尾递归进行优化,将其转化为迭代形式,避免了调用栈的深度增加,从而减少了栈溢出的风险。

尾递归是针对传统的递归算法而言的, 传统的递归算法好像永远和溢出、效率低下联系在一起。
而尾递归就是从最后开始计算, 每递归一次就算出相应的结果, 也就是说, 函数调用出现在
调用者函数的尾部, 因为是尾部, 所以根本没有必要去保存任何局部变量。直接让被调用的函数
返回时越过调用者, 返回到调用者的调用者去.

以下是一个具体的实例:
线性递归:
long Rescuvie(long n) {  
  return(n == 1) ? 1 : n * Rescuvie(n - 1);  
}  

尾递归:
long TailRescuvie(long n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++ 老炮儿的技术栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值