题解 | #斐波那契数列#
斐波那契数列
https://www.nowcoder.com/practice/aa8ffe28ec7c4050b2aa8bc9d26710e9
三种方式,各有各的好处
第一种方式:
<script type="text/javascript"> // 填写JavaScript // 递归形式:重复计算量大 function fibonacci(n) { if(n < 2){ return n; } return fibonacci(n - 1) + fibonacci(n - 2); } </script>
第二种方式:
<script type="text/javascript"> // 填写JavaScript // 动态规划形式: 避免很多重复计算,每次计算中间值都存在数组中 function fibonacci(n){ if(n < 2) return n; // 存储一下f(0)和f(1)的值到数组 let dp = [0, 1]; // for循环每次值都为数组前两项索引相加 for(let i = 2; i <= n; i++){ dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; } </script>
第三种方式:
<script type="text/javascript"> // 填写JavaScript // 优化版本:相比动态规划我不需要用数组存储每次中间值,通过两个变量一直更新上一次和当前值, // 结果我只关心 current 得值 function fibonacci(n){ if(n < 2) return n; let prev = 0; let current = 1; for(let i=2; i<=n; i++){ // 下一次斐波那契数列的值 const next = prev + current; prev = current; // 更新上一斐波那契数列的值 current = next; // 更新当前斐波那契数列的值 } return current; } </script>