递归
// 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); /* 为什么要用递归?它更快吗 迭代的版本比递归的版本快很多,所以这表示递归更慢。但是,再看看三个不同版本的代码。 递归版本更容易理解,需要的代码通常也更少。另外,对一些算法来说,迭代的解法可能不可用, 而且有了尾调用优化,递归的多余消耗甚至可能被消除。 所以,我们经常使用递归,因为用它来解决问题会更简单 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?