zoukankan      html  css  js  c++  java
  • 关于fibonacci数列用JS写的一点小优化

    直接上代码 

     1 var month =  prompt("请输入月数:")
     2 
     3     function fibobo(x) {
     4         //先定义一个已有前两项的数组,用来作缓存
     5         var arr = [1, 1];
     6    
     7         (function fib(n) {
     8             if (n === 0 || n === 1) {
     9                 return 1;
    10             }
    11         
    12             //第一次执行n >= 2的值后,就往arr数组中添加 fib(n-1)+fib(n-2) 的值
    13             //即:如果arr数组中不包含  fib(n-1)+fib(n-2) 的值 ,就添加保存
    14             if (!arr[n]) {
    15                 arr.push(fib(n - 1) + fib(n - 2));
    16                 return arr[n];
    17             } 
    18             //当arr数组中保存有 fib(n-1)+fib(n-2) 的值 ,就直接返回该值
    19             else {
    20                 return arr[n];
    21             }
    22         })(x);
    23 
    24         return arr[x - 1];
    25     }
    26 
    27     console.time('优化后方案')
    28     console.log(month+"个月后有"+fibobo(month)+"只兔子");
    29   
    30        console.timeEnd('优化后方案')
    31 
    32     function fib(n) {
    33         if (n<=2){
    34            return 1 ;
    35         }
    36         return fib(n -1 ) + fib(n - 2);
    37     }
    38 
    39     console.time('优化前方案')
    40      console.log(month+"个月后有"+fib(month)+"只兔子");
    41      console.timeEnd('优化前方案');

     generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。
    generator由 function* 定义(注意多出的*号),并且,除了 return 语句,还可以用 yield 返回多次。

    function* fib(max) {
        var
            t,
            a = 0,
            b = 1,
            n = 0;
        while (n < max) {
            yield a;
    
            [a, b] = [b, a + b];
            n ++;
        }
        return;
    }
    var f = []
    
    for(var x of fib(200)){
        f.push(x)
    }
    console.log(f)
  • 相关阅读:
    jenkins学习:jenkins+maven
    git学习
    jenkins学习:jenkins+gitlab
    mongodb安装和运行
    ideaJ+maven+javaweb实践: sevlet实现upload&download,javaIO代码
    pageObject学习
    postman接口测试
    TODO 软件测试68题
    testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
    testng报告-extentsReports使用-klov
  • 原文地址:https://www.cnblogs.com/lin-dong/p/6435989.html
Copyright © 2011-2022 走看看