最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript中递归实现的方法及其区别

来源:动视网 责编:小采 时间:2020-11-27 22:30:32
文档

JavaScript中递归实现的方法及其区别

JavaScript中递归实现的方法及其区别:递归函数:递归函数是在通过名字调用自身的情况下构成的。 递归实现阶乘函数: 方法一:通过使用函数的名字 function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(
推荐度:
导读JavaScript中递归实现的方法及其区别:递归函数:递归函数是在通过名字调用自身的情况下构成的。 递归实现阶乘函数: 方法一:通过使用函数的名字 function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(


递归函数:递归函数是在通过名字调用自身的情况下构成的。

递归实现阶乘函数:

方法一:通过使用函数的名字

 function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*factorial(num-1);
 }
 }
 console.log(factorial(4));

结果为:24;

但是这种方法实现递归有一个问题,观察以下代码:

function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*factorial(num-1);
 }
 }
 var anthorFactorial=factorial;
 console.log(anthorFactorial(4));

结果为:24;

但是:

function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*factorial(num-1);
 }
 }
 var anthorFactorial=factorial;
 factorial=null;
 console.log(anthorFactorial(4));

结果为:报错

这是因为:

我们定义的函数名,其实是指向函数的一个指针,定义的anotherFactorial 也指向了那个函数,所以调用anotherFactorial (4)可以成功的输出24

当 factorial = null时,执行定义函数的引用就剩下了anotherFactorial,那么在调用anotherFactorial(4)就会显示以上的错误的信息。

此时可以使用arguments.callee来替代函数定义中的 factorial。

方法二:通过使用arguments.callee

function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*arguments.callee(num-1);
 }
 }
 var anthorFactorial=factorial;
 factorial=null;
 console.log(anthorFactorial(4));

结果为:24

arguments.callee是一个指向正在执行的函数的指针,因此可以用arguments.callee来实现对函数的递归调用。通过使用arguments.callee来代替函数名,可以保证在调用函数时无论怎样都不会出现问题。因此,在编写递归函数时,使用argumnts.callee总比使用函数名更加保险。
但是,在严格模式下,不能通过脚本访问arguments.callee,访问这个属性会报错,不过可以通过命名函数表达式来达到相同的效果。

方法三:通过命名函数表达式

 var factorial=function f(num){
 if(num<=1){
 return 1;
 }else{
 return num*f(num-1);
 }
 };
 f=null;
 console.log(factorial(4));

这种方式在严格和非严格模式下都有效。

总结

以上所述是小编给大家介绍的JavaScript中递归实现的方法及其区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

文档

JavaScript中递归实现的方法及其区别

JavaScript中递归实现的方法及其区别:递归函数:递归函数是在通过名字调用自身的情况下构成的。 递归实现阶乘函数: 方法一:通过使用函数的名字 function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(
推荐度:
标签: 方法 实现 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top