在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
在操作递归时,递归会把自己参数中的值举行通报,直到我们通报的值到达我们设置的跳出条件时才会住手通报,尔后面的公式指的是与我们需要获得的值举行的相对应操作,当我们写在函数中的值就相当于每一个通报的实参。
优化的头脑通过界说一个数组,用来存放盘算过的效果缓存起来, 这样就可以削减许多重复盘算, 从而提高执行效率。代码如下
兔子序列(斐波那契数列 )
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