js中递归的重要性

工作当中常常要用到js的递归实现某些功能,今天就介绍下递归的应用,附上代码

// let i = 0,
//     result = 0;
// function count(i) {
//     if (i==10) {
//         return false;
//     }else {
//         result += i;
//         i++;
//         console.log(result,i);
//         count(i);
//     }
// }    
// count(i);

// 递归累加
// function count(n) {
//     if(n===1 || n===0){
//         return 1;
//     }
//     return n + count(n-1);
// }
// console.log(count(10));

// 递归阶乘
function multiplication(n) {
    if (n===1 || n===0) {
        return 1;
    }
    return n * multiplication(n-1)
}
console.log(multiplication(4));


/* 
JavaScript 调用栈大小的限制
    递归并不会无限地执行下
    去,浏览器会抛出错误,也就是所谓的栈溢出错误(stack overflow error)
*/
// 递归求斐波那契数
// function fibonacci(n) {
//     if(n < 1) return 0;
//     if(n <= 2) return 1;
//     return fibonacci(n-1) + fibonacci(n-2)
// }
// console.log(fibonacci(6));

// 记忆化斐波那契数--它可以防止递归算法重复计算一个相同的值
function fibonacciMemosization(n) {
    const memo = [0, 1];
    function fibonacci(n) {
        console.log('n',n);
        if (memo[n] != null) return memo[n];
        return memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo);
    }
    // const fibonacci = (n) => {
    //     console.log('memo',memo);
    //     if (memo[n] != null) return memo[n];
    //     return memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo);
    // };
    // console.log(fibonacci);
    return fibonacci(n);
}
let test = fibonacciMemosization(6)
console.log(test);


/* 
为什么要用递归?它更快吗
        迭代的版本比递归的版本快很多,所以这表示递归更慢。但是,再看看三个不同版本的代码。
        递归版本更容易理解,需要的代码通常也更少。另外,对一些算法来说,迭代的解法可能不可用,
        而且有了尾调用优化,递归的多余消耗甚至可能被消除。
        所以,我们经常使用递归,因为用它来解决问题会更简单
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuaaaa3944210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值