【JS函数进阶】递归和堆栈

本文探讨了JavaScript中的递归概念,解释了如何使用递归实现x的n次方,并介绍了递归深度和执行上下文堆栈。虽然递归占用内存,但通常因简洁性而被优选。循环虽然效率高,但在复杂性和可维护性方面可能不如递归。
摘要由CSDN通过智能技术生成

递归

首先什么是递归?

函数在解决某些问题的时候,需要调用其他的函数或者是其本身,那么对于调用其本身的情况,就可以叫做递归

实现简单函数:x的n次方

第一种使用for 循环,也是初学者容易想到的方法;那么用递归怎么实现呢?

function pow(x,n){
if (n==1){
return x}else{
return x*pow(x,n-1)
}
alert(pow(2,3));

以上程序可以说明,pow函数不断的调用其本身,那么到n==1的时候,就会停止,也就达到了平方的目的

//简写如下
function pow(x,n){
return (n==1)?x:(x*pow(x,n-1))}
alert(pow(2,3));

相关概念:
递归深度:最大的嵌套调用次数被称为递归深度,递归深度受限于JavaScript引擎
执行上下文:执行上下文是一个内部数据结构,包含函数执行时的详细细节,当前控制流所在的位置,当前的变量等信息
在这里插入图片描述
执行上下文堆栈:由执行上下文数据结构形成的栈结构
在这里插入图片描述
最后一个n==1输出x之后,函数执行完毕,开始释放栈里面的内容,一次执行。

循环

我们刚刚也说过递归也是可以通过循环来实现的,那么到底是使用递归还是循环呢?

递归过程中使用到了执行上下文堆栈,是占用内存,但是循环过程中,一般只需要一个上下文,循环变体会更加有效
但是存在问题是,循环结构复杂,不容易理解和维护,所以一般情况下是使用递归较多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值