不会递归?递归方法奉上

递归

如果你进一家公司,面试官问你递归的问题,那么他对你的要求就挺高了。但是很多公司有明文规定项目中不能使用递归!(黑人问号脸???)在这里插入图片描述
当我们学会递归以后就能明白这两句看似矛盾的话究竟是怎么回事了。
进入正题!我们首先要知道什么是递归?

递归
满足以下三个特点:
1、函数自己调用自己;
2、一般情况下有参数;
3、一般情况下有return

我们要知道,递归能解决循环能做的所有事情,有一些循环不容易解决的事情,递归就能比较容易的解决

递归都可以写出来,但是不知道为什么这么写就对。

接下来上案例:

计算1~n的和?
方法一:循环

<script>
        function sum(n) {
            var res = 0;//声明一个用于累加和的值
            for (var i = 1; i <= n; i++) {
                res += i;
            }
            return res;
        }
        alert(sum(100));
    </script>

这里可以得到1~100的累加和
在这里插入图片描述
方法二:递归
为了让我们能够更加得心应手的运用递归
这里我们有一套专门编写递归的方法:
1、首先去找临界值,即无需计算可获得的值;
2、找这一次和上一次的关系;
3、假设当前函数已经可以使用,调用自身计算上一次

我们可以得到1~99的和 与 1~100的和之间的关系
sum(100) = sum(99) + 100
则 sum(n) = sum(n - 1) + n

<script>
        function sum(n) {
            if (n == 1) { //找到一个临界值
                return 1;
            }
            return sum(n - 1) + n;
        }
        alert(sum(100));
    </script>

同样得到我们想要的结果
在这里插入图片描述
但是我们可能不明白为什么这么写,其实就是在没进行到临界值之前,递归会开大量的内存去计算每一个公式,最后执行到临界值的时候,就把所有的内存释放掉,得到我们需要的结果。

最后回到我们刚开始说的问题,这两句看似矛盾的话究竟是怎么回事呢
是因为只要你能理解递归,那么你就对内存管理机制和垃圾回收机制了解的非常深刻。
而公司明文规定不能使用递归是因为比较危险,因为只要你写递归的话,函数调用的值只要是不确定的,那么一旦它发生故障,就会瞬间产生许多内存,程序可能会崩溃,带来比较严重的后果。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值