递归

递归

所谓递归就是自己调用自己

递归思想就是:将问题归结为已经解决的问题

实现递归的过程:

  • 什么时候递归
  • 什么时候跳出

知识点:arguments.callee 就是当前函数的引用

上几个demo:

  • n!

    function fn(n){
        if(n <= 0) return ; 
        if(n === 1) return 1;
        return arguments.callee(n - 1)*n;
    }
    console.log(fn(5));  //=> 120
    

analyze:

将问题归结为已经解决了的问题,求第n项的阶乘

假定已经有一个用于求阶乘的函数,即:函数本身

那么现在就可以求出第n - 1项的阶乘

然后用第n - 1项去乘以n,即fn(n - 1)*n就是fn( n )

结束条件,即:当n等于1的时候

  • 求斐波那契数列(兔子数列)

    // 0, 1, 2, 3, 4, 5, 6...n
    // 1, 1, 2, 3, 5, 8, 13...
    function fn(n){
        if(n < 0) return ;
        if(n === 1 || n === 0) return 1;
        return arguments.callee(n - 2) + arguments.callee(n - 1);
    }
    console.log(fn(5));  // => 8
    

analyze:

将问题归结为已经解决的问题:

即:已经有一个可以求出第n项的斐波那契数列值

该数列的规律为:第n项是第n - 1与第n - 2项值的和

结束条件:第1项与第0项刚好为值1

https://github.com/PaddyWang/summarize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值