js递归

本文深入探讨JavaScript中的递归,以阶乘函数为例,详细解析递归的实现方法,包括使用arguments.callee、命名函数表达式以及循环实现。同时,介绍了递归在树形结构数据处理和斐波那契数列中的应用,强调了递归的必要因素——递归方程和结束条件。
摘要由CSDN通过智能技术生成

说到递归,就不得不说下阶乘了,阶乘函数是递归经典案例

阶乘的实现方法(一种递归,两种循环)

1.

{

function factorial(num) {

if (num <= 1) {

return 1;

}

else {

return num * factorial(num - 1);

}

}

console.log(factorial(3));

}

/如上面的代码所示,在函数有名字,而且名字以后也不会变的情况下,这样定义没有问题。但问题是这个函数的执行与函数名 factorial 紧紧耦合在了一起。为了消除这种紧密耦合的现象,可以像下面这样使用 arguments.callee。(非严格模式)

arguments.callee是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归调用

2.

{

function factorial(num) {

if (num <= 1) {

return 1;

}

else {

return num * arguments.callee(num - 1);

}

}

console.log(factorial(3));

}

在这个重写后的factorial()函数的函数体内,没有再引用函数名 factorial。这样,无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。

{

let trueFactorial = factorial;

factorial = function () {

return 0;

};

console.log(trueFactorial(5)); //120

console.log(factorial(5)); //0

}

 但在严格模式下,不能通过脚本访问 arguments.callee,访问这个属性会导致错误。不过,可以使用命名函数表达式来达成相同的结果

3.

{

let factorial = (function f(num) {

if (num <= 1) {

return 1;

}

else {

return num * f(num - 1);

}

})

console.log(factorial(3));

}

4:for循环


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值