在js函数中使用递归

这篇文章主要介绍递归在js函数中的应用,介绍函数中条件的关系


1.简单认识关于递归
递归算法的特点:

1.在函数过程中调用自身。
2.在递归过程中,必须有一个明确的条件判断递归的结束,既递归出口。
3.递归算法简洁但效率低,通常不作为推荐算法。

上面是百度上的解释,讲的也算明确
接下来我们来看看简单的递归案例


一. 自己调用自己

function fun()
{
    // 自己调用自己,称为递归调用
    fun();
    console.log("m2");
}
fun();
//上面代码不难看出是一个很简单的自调用的函数,但上面有说到,递归调用要有个递归出口,不然这个函数没法结束.可能到这你还是没有理解继续往下看

二. 阶乘:求100内的阶乘

function Sum (num) {
    if ( num == 1 ) {
        return num;
    }else {
    return num + Sum(num-1);
    }
}
var s = Sum(100);
console.log(s);
/*
分析:(要记住递归就是不停调用自身函数) 
100以内的和: 100+99+98+97+96+95+....+1;
首先可以知道这个例子的递归出口就是当num=1时;函数就要结束了
继续每次相加时数都是依次减一的,
所以函数每次执行的时候数值应该是这样相加的 num 和 num-1;这样把规律带入函数中
得到num+Sum(num-1);
*/

三. 小例子: 1元可以买一瓶矿泉水, 两个空瓶可以换一瓶矿泉水, 那20元最多可以喝多少瓶矿泉水[使用递归]
关于上面的例子可以有很多算法,可以通过找规律得到20元能喝多少瓶矿泉水,但我们使用递归来解决

思路分析:
1元可以买1瓶,
2元—>3瓶
3元—>5瓶
4元—>7瓶
5元—>9瓶

可能有人没有反应过来,我来解释一下:一开始3元的时候可以买3瓶,3瓶喝完两瓶可以换1瓶,换的1瓶和原先1瓶喝完又可以换一瓶,这样加起来共5瓶.
我们用算式来看看5元的时候:
5/2的数是能换的瓶数, 我们还要知道换过瓶数后还能不能再换,所以还要 5%2 这个就是换过瓶以后再换的瓶数
这样如果还不清楚的话,你可以拿出草稿纸演示一遍,就会明白了.
这样的话,我们的思路就很清晰: 最终喝的瓶数=身子钱买的瓶数+换的瓶数;
看下面代码

function Sum (n) {
    if (n==1 || n == 0) {
        return n;   //递归出口
    }else {
    return n + Sum(Math.floor(n/2)) + Sum(Math.floor(n%2))
    }
}
    var s = Sum(20);
    console.log(s)   //39

四. 文末总结:
1,递归效率低,谨慎使用,使用不当陷入死机
2. 递归原理就像一个人a在迷宫中心里面,另外一个人b要进去解救a,所以b要一层层的去寻找a,当找到a的时候,还要再一层层出来.就是简单介绍说递归的运作原理不是很明智选择.当然要根据实际开发环境而定.
3. 如有不对的地方,欢迎指出,共同进步.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值