斐波那契数列

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script>
        let fbnqSave = {};
        function fbnq (i,x) {
            // body... 
            function inner(x){
                if(x<=0){
                    console.log('输入错误!')
                    return;
                }
                if(x===1||x===2){
                    return 1;
                }else{
                    if(fbnqSave[x]){
                        return fbnqSave[x];
                    }
                    return inner(x-1)+inner(x-2);
                }
            }
            var res = inner(x);
            if(i === x){
                console.time('log')
            }
            fbnqSave[x] = res;
        }
        function fbnqsl(i){
            console.timeEnd('log')
            for(var k = 1; k <= i; k++){
                fbnq(i,k);      
            }
        }
    </script>
</body>
</html>

用递归的方法计算斐波那契数列,一旦输入的数值太大,那么递归算法时间就会非常长,导致超过60之后几乎无法计算。时间复杂度呈指数增长。
但可以利用缓存来优化计算,上述代码可以极大的提高计算效率。计算入口在fbnasl()函数上。
PS:利用迭代也很简单,此题旨在研究缓存的重要性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容