题解 | #斐波那契数列#

斐波那契数列

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>
全部评论

相关推荐

评论
1
收藏
分享
牛客网
牛客企业服务