zoukankan      html  css  js  c++  java
  • JS递归

    递归:

    函数中用调用函数自己,此时就是递归,递归一定要有结束条件

    function f1() {
    console.log("从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事:");
    f1();
    };
    f1();//浏览器崩溃,因为没有结束条件——死循环

    改进如下:
    var i=0;
    function f1() {
    i++;
    if (i<5){
    f1();
    }
    console.log("从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事:");
    };
    f1();

    小例子:

    递归实现:求n个数字的和 n=5 ------->5+4+3+2+1;

    //for 循环写法:
    var sum=0;
    for (var i=0;i<=5;i++){
    sum+=i;
    }
    console.log(sum);
    ----------------------分割线---------------------------

    function getSum(x) {
    if (x==1){
    return 1
    }
    return x+getSum(x-1);
    };

    var sum1=getSum(5);
    console.log(sum1);
    console.log(getSum(10));

    执行过程:
    代码执行getSum(5)—>进入函数,此时的x是5,执行的是5+getSum(4),此时代码等待
    此时5+getSum(4),代码先不进行计算,先执行getSum(4),进入函数,执行的是4+getSum(3),等待, 先执行的是getSum(3),进入函数,执行3+getSum(2),等待,先执行getSum(2),进入函数,执行 2+getSum(1);等待, 先执行getSum(1),执行的是x==1的判断,return 1,所以,
    此时getSum(1)的结果是1,开始向外走出去
    2+getSum(1) 此时的结果是:2+1
    执行:
    getSum(2)---->2+1
    3+getSum(2) 此时的结果是3+2+1
    4+getSum(3) 此时的结果是4+3+2+1
    5+getSum(4) 此时的结果是5+4+3+2+1

    //递归案例:求斐波那契数列

    function getFib(x) {
    if(x==1||x==2){
    return 1
    }
    return getFib(x-1)+getFib(x-2);
    }
    console.log(getFib(12));

  • 相关阅读:
    HDU 1536 sg-NIM博弈类
    Codeforces Round #361 (Div. 2)
    计蒜课复赛 联想电脑
    codevs3044 线段树+扫描线
    yii设置返回数据为JSON格式
    mysql中的查询优化
    计算两个经纬度间的距离
    一维数组打乱顺序shuffle函数
    array_filter可以去除数组中value为空的键值
    二维数组按某值分组求和
  • 原文地址:https://www.cnblogs.com/xzybk/p/12520422.html
Copyright © 2011-2022 走看看