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
在操作递归时,递归会把自己参数中的值进行传递,直到我们传递的值达到我们设置的跳出条件时才会停止传递,而后面的公式指的是与我们需要得到的值进行的相对应操作,当我们写在函数中的值就相当于每一个传递的实参。
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];//返回数组中的值
}
}完结~~~~~~
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!