函数递归与循环(各自的优点与局限性+代码图片实例演示)

递归的特点:

1.直观、简洁,易于理解和实现。

2.适用于问题的规模可以通过递归调用不断减小的情况。

3.可以处理复杂的数据结构和算法,如树和图的遍历。

4.存在栈溢出风险(stack overflow)函数每次调用都会在栈区开辟一个空间存放一般在函数调用次数过多或者死递归的情况下出现(栈空间一般只有8MB,所以递归层数不宜过深,一般不超过1e6层)

循环的特点:

1.直接控制流程,效率较高。

2.适用于问题的规模没有明显的缩减,或者需要特定的选代次数。

3.适合处理大部分的动态规划问题。

在部分情况下,递归和循环可以相互转化。

4.代码量可能较大。

 

能相互转化循环与递归的优先使用谁:

一般能用递归解决的问题就用递归(代码量小) 但是递归存在明显的效率问题和栈溢出的风险 那么优先使用循环

以求斐波那契数列的第n个数值代码为例

下面↓是用递归写的

ebba3aa530d34b47950aacf4427375fb.png

 下面↓是用循环写的

52245e601e0e4c1aa27503806e835581.png

 但是当我们输入40时 可以显而易见的是用递归写的代码运算速度完全慢于用循环运算的速度 这是为什么呢?

显然 当用递归时存在着大量重复的运算

让我们写出来递归的简单过程

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值