动态规划

2018-03-21  本文已影响0人  Creator93
动态规划解决方案从底部开始解决问题, 将所有小问题解决掉, 然后合并成一个整体解决方案, 从而解决掉整个大问题 。

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........

这个数列从第3项开始,每一项都等于前两项之和。

function recurFib(n){
        if(n<2){
            return n;
        }else{
            //document.write("第"+(n-1)+"次计算&nbsp;n-1="+(n-1)+recurFib(n-1)+'&nbsp;&nbsp;&nbsp;');
            // document.write("n-2="+(n-2)+recurFib(n-2)+"<br>");
            return recurFib(n-1)+recurFib(n-2);
        }
    }

动态规划
通过数组 val 中保存了中间结果, 如果要计算的斐波那契数是 1 或者 2, 那么 if 语句会返回 1。 否则,数值 1 和 2 将被保存在 val 数组中 1 和 2 的位置。

循环将会从 3 到输入的参数之间进行遍历, 将数组的每个元素赋值为前两个元素之和, 循环结束, 数组的最后一个元素值即为最终计算得到的斐波那契数值, 这个数值也将作为函数的返回值

 function dynFib(n){
            let val = [];
            for(let i = 0;i<=n,i++){
                val[i] = 0;
            }
            if(n == 1 || n==2){
                return 1;
            }else{
                val[1] = 1;
                val[2] = 2;
                for(let i = 3;i<=n;i++){
                    val[i] = val[i-1]+val[i-2];
                }
            }
            return val[n];
        }
上一篇下一篇

猜你喜欢

热点阅读