逆战班!js基础关于函数递归

Posted lanbai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆战班!js基础关于函数递归相关的知识,希望对你有一定的参考价值。

函数递归的特点:

1,函数自己调用自己

2,一般会有return

3,一般会有参数

注意:

****递归能做循环能做的一切,还能解决循环不容易解决的事

****有时候会搞不懂递归是如何正确的实现功能的(因为有套路)

在一般的公司里面,明文禁止使用递归,但是懂得递归又是一个程序员必备的知识!!!!

至于为什么公司不允许使用递归,原因如下:

    案例:计算1~100的和

使用普通循环语句:

<script>
        function add(a) {
            var sum=0
            for(var i = 1;i <= a;i++){
                sum += i
            }
            return(sum)
        }
        document.write(add(100))
</script>

结果为5050

使用递归思想:

写递归的套路:

  1.寻找临界值,一般为无需计算的初始值(用于打破递归链,实现递归)

  2.找到这一次计算与上一次的关系

  3.调用自己计算上一步

 

任然是计算1~100的和

定义函数add()

很明显,第一次计算也就是算1的和,结果就是1,也就找到初始值1

接着我们可以知道,如果要算第9次,我们需要第9次的值+10,也就是

add(10)=add(9)+10

所以可知一般规律为:add(n)=add(n-1)+n

于是递归函数就可以这么来写:

<script>
        function add(a) {
            var sum = 0
            if( a==1){
                return 1;
            }
            sum = add(a-1) + a
            return sum;
        }
        document.write(add(100))
</script>

递归思想非常的有趣,会使得代码量减少

但是它也存在一个致命的弱点:

就是及其的浪费内存资源,在调用函数的时候,内存会给程序分配空间,程序运行完了就可以释放

但是递归思想会使得函数大量的调用自身,而上一个值没有计算出来,下一个值就不可能计算出来,也就是之前分配内存得不到释放

当我们递归到了极限时,函数又会极快的完成工作,又释放出内存,计算机执行这一操作的速度非常快,内存硬件会吃不消

如果我们计算1~10000000000,很明显这个小小的程序可能会占用完所有内存,使得电脑死机,在公司工作使用函数递归会非常危险!!!!

以上是关于逆战班!js基础关于函数递归的主要内容,如果未能解决你的问题,请参考以下文章

逆战班学习总结 js的几种继承方式

逆战班!js循环案例

逆战班!js数据类型转换

逆战班 js双重循环嵌套原理

嘟嘟好课分享:MySQL优化-逆战班

逆战班-vuex