三种方式,各有各的好处
第一种方式:
<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>



京公网安备 11010502036488号