逆战班!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,很明显这个小小的程序可能会占用完所有内存,使得电脑死机,在公司工作使用函数递归会非常危险!!!!

原文地址:https://www.cnblogs.com/lanbai/p/12640008.html

时间: 2024-11-07 19:41:22

逆战班!js基础关于函数递归的相关文章

JS基础-运算符-函数

1.运算符  1.赋值运算符和扩展运算符    1.赋值运算符 =    2.扩展运算符      +=,-=,*=,/=,%=,^=....      ex:        a=a+b;--> a+=b; a=a+1;--> a++,a+=1,++a      实现两个数字的换位:        a^=b; b^=a; a^=b;  2.条件运算符    条件运算符又称三目运算符.    单目(一元)运算符,只需要一个操作数或表达式.     ex:++,--,!    双目(二元)运算符,

JS基础及函数

一.JS基础 1.算法及流程图         解决问题的步骤或程序. 特性:          明确性: 算法对每一个步骤都有确切的,非二性的规定.         有效性: 算法的每一个步骤都能够通过基本运算有效地执行,并得到确定的结果.         有限性: 算法由有限的步骤组成. 分类:算术算法.事务性算法     2.流程图         即算法的一种图形解方法.         特点:顺序结构.选择结构.循环结构     3.JS基础内容     引入JavaScript方式:

Python开发【第一篇】Python基础之函数递归

函数递归 递归的本质: 就是一个函数调用另外一个函数. def d(): return '123' def c(): r = d() return r def b(): r = c() return r def a(): r = b() print(r) a() def func(n): n += 1 if n >=4: return 'end' return func(n) r = func(1) print(r)

Python3基础 用 函数递归求解 一个数字的阶乘

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: # 递归 要调用函数自身,都要进行压栈,弹栈.资源消耗的问题 # 递归 要有正确的终止条件 # 递归有危险性 def f(x): if x==1 : return 1 else : return x* f(x-1) print(f(5)) """ step

JS 基础之 函数

1.Js中函数的定义:  function fn1(){...}  或者 var fn1 = function(){...}   或者  var fn1 = new Function("num1","num2","alert(num1+num2)"); JS 中函数 是一个 特殊的对象,是Function对象的实例,当函数定义完毕后,会在内存中 如果 函数 中 有 return 语句,执行完 return语句后 会立即退出, return后面的语

js基础之函数递传参数

什么是参数?参数就是JS的数据类型:如:数字.字符串.布尔. 函数.对象.未定义... 先举一个简单的例子: function fn1(a,b){ alert(a+b); }fn1(100,'px');//第一个参数是函数中的a,第二个是b; 这里的a和b,可以是任何数据类型,参数可以根据自己的需求放N多个. 函数作为参数时:1.参数为匿名函数时,直接调用:例: function fn3(fn){ fn() };fn3(function (){alert(a)}); //结果是a 2.参数为有名

Python函数基础与函数递归

数学中函数的定义: 一般的 在一个变化过程中, 如果有两个变量 x 和 y 并且 对于 x的每一个确定的值,y都有唯一确定的值与 其对应, 那么我们就把 x 成为 自变量 把y成为 因变量 y是x的函数.自变量x的取值范围叫这个函数的定义域 y = 2*x python 中函数 是一种逻辑结构化和过程化的一种变成方法python中函数定义的方法: 1 def test(x): 2 "the function deinitions" 3 x += 1 4 return x def 定义函

js基础之函数递传参数与作用域(5下)

上一章节面试题分析: 第一步:浏览器预解析这段JS代码,找var function和参数: 第二步:逐行解读代码: 下面是具体步骤分析:

js基础(函数)

函数一种对象,函数中可以封装功能,使用typeof检查一个函数对象的时候,会返回function 创建一个函数对象 var function = new Function(); 可以将要封装的代码以字符串的形式传递给构造函数 var function = new Function("console.log('xxxxxxxx');");; 调用函数的语法:函数对象(),function() 使用函数声明来创建一个函数 语法: function 函数名称(形参列表){ 函数体: } 使用