JS递归的用法详解


本文摘自PHP中文网,作者coldplay.xixi,侵删。

递归:

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function f1() {

    console.log("从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事:");

    f1();

};

f1();//浏览器崩溃,因为没有结束条件――死循环

 

改进如下:

    var i=0;

function f1() {

    i++;

    if (i<5){

        f1();

    }

    console.log("从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事:");

};

f1();

相关学习教程:javascript教程

小栗子:

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//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

1

结果:15

再来几个:

1

2

3

4

5

6

7

8

9

10

//递归案例:求一个数字各个位数上的数字的和:  123   --->6 ---1+2+3

//523

function getEverySum(x) {

    if(x<10){

        return x;

    }

    //获取的是这个数字的个位数

    return x%10+getEverySum(parseInt(x/10));

}

console.log(getEverySum(1364));//5

1

2

3

4

5

6

7

8

9

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

 

   function getFib(x) {

       if(x==1||x==2){

           return 1

       }

       return getFib(x-1)+getFib(x-2);

   }

   console.log(getFib(12));

递归:

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

阅读剩余部分

相关阅读 >>

js的原型和原型链是什么

javascript如何删除键值对

js中对象深拷贝和浅拷贝的区别是什么

js怎么判断是否为数字

如何利用js实现水平移动与垂直移动效果

web学习之怎么使用纹理贴图

js怎么定义map

如何使用js控制下拉列表左右选择

利用js实现自定义右键菜单插件

js函数的回调

更多相关阅读请进入《js》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...