zoukankan      html  css  js  c++  java
  • js函数实现递归自调用的方法

    js函数的递归调用方法

    1.通过函数自身名字递归调用

    function sum(num){
      if(num<=1){
        return 1;
      }else{
        return num+sum(num-1);
      }
    }
    
    console.log(sum(5));//15

    这种通过函数名字调用自身的方式存在一个问题:函数的名字是一个指向函数对象的指针,如果我们把函数的名字与函数对象本身的指向关系断开,这种方式运行时将出现错误。

    2.通过arguments.callee调用函数自身

    function sum(num){
      if(num<=1){
        return 1;
      }else{
        return num+arguments.callee(num-1);
      }
    }
    console.log(sum(5));//15
    
    var sumAnother=sum;
    console.log(sumAnother(5));//15
    
    sum=null;
    console.log(sumAnother(5));//15

    这种方式很好的解决了函数名指向变更时导致递归调用时找不到自身的问题。但是这种方式也不是很完美,因为在严格模式下是禁止使用arguments.callee的。

    3.通过函数命名表达式来实现arguments.callee的效果。

    var sum=(function(){
        'use strict'
        return  function fun(num){
            if(num<=1){
                return 1;
            }else{
                return num+fun(num-1);
            }
        }
    })()
    
    console.log(sum(5));//15
    
    var sumAnother=sum;
    console.log(sumAnother(5));//15
    
    sum=null;
    console.log(sumAnother(5));//15
    
    
  • 相关阅读:
    poj 2443
    codeforces 263D
    codeforces 263C
    uva 11080
    uva 11235
    uva 11748
    STL uva 11991
    (KM) uva 11383
    (树形DP) uva 10859
    codeforces 242C
  • 原文地址:https://www.cnblogs.com/zhaozhipeng/p/8080663.html
Copyright © 2011-2022 走看看