逆战班!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基础关于函数递归的主要内容,如果未能解决你的问题,请参考以下文章