js递归函数——函数体内挪用本函数的方式

在js中通过若是一个函数直接或间接挪用函数自己,则该函数称为递归函数。递归是一种头脑:类似于我们的计数器,开闭原则。  递归的实质就是函数自己挪用自己。  递归注重点:递归必须有跳出条件...

在js中通过若是一个函数直接或间接挪用函数自己,则该函数称为递归函数。递归是一种头脑:类似于我们的计数器,开闭原则。  递归的实质就是函数自己挪用自己。  递归注重点:递归必须有跳出条件,否则是死循环。

我们接纳内联函数来做说明,内联函数是指虽然在函数外没有声明变量f,但是在函数内部,是可以使用f()来挪用自己的。

兔子序列(斐波那契数列 )
var f=function(n) {
    if(n<2){
        return n;
    }else{
      return f(n-1)+f(n-2);//挪用自身函数实现递归
     }
}

console.log(f(5))值为5

阶乘递归函数  
var f=function(n){ 
    if (n<=1){ /*跳出条件*/
       return 1; 
    }else{ 
         return n*f(n-1);
    } 
}

 console.log(f(5)) 值为5*4*3*2*1=120

求n^m次方  
var f=function(a,b){
   if(b==0){
      return 1;
   }
   return f(a,b-1)*a;
}

console.log(f(2,5))值为32

求等差数列前几项的和 
var f=function(n) {
    if (n == 1){
       return 1;
    }
    return f(n - 1) + (2 * n - 1)
}

console.log(f(5))值为25

在操作递归时,递归会把自己参数中的值举行通报,直到我们通报的值到达我们设置的跳出条件时才会住手通报,尔后面的公式指的是与我们需要获得的值举行的相对应操作,当我们写在函数中的值就相当于每一个通报的实参。

通过上面的方式实现效率异常低, 缘故原由就在于, 需要频频挪用函数自生, 且每次挪用都有许多重复盘算, 很明显, n越大, 挪用次数越多.若是举行界限项庞大的函数,内存会大量虚耗。

memoization优化递归

优化的头脑通过界说一个数组,用来存放盘算过的效果缓存起来, 这样就可以削减许多重复盘算, 从而提高执行效率。代码如下

兔子序列(斐波那契数列 )  
var f=function(n){
    var cache=[];//界说一个空数组用来存放盘算好的数据
  if((n==0)||(n==1)){
    return n;
  }else{

/*应用||或运算符“短路”的特征,若在数组中找到其值,则直接使用数组内的值,若没有,再举行盘算,并将值存入数组*/

    cache[n-1]=cache[n-1]||fibonacci(n-1);     cache[n-2]=cache[n-2]||fibonacci(n-2);     return cache[n-1]+cache[n-2];//返回数组中的值   } }

完结~~~~~~


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入

3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/29

  • 发表于 2021-04-05 14:42
  • 阅读 ( 200 )
  • 分类:互联网

0 条评论

请先 登录 后评论
故意思城
故意思城

685 篇文章

你可能感兴趣的文章

相关问题