使用JavaScript ES6的新特性计算Fibonacci(非波拉契数列)

程序员面试系列程序员

Java面试系列-webapp文件夹和WebContent文件夹的区别?web

程序员面试系列:Spring MVC能响应HTTP请求的缘由?面试

Java程序员面试系列-什么是Java Marker Interface(标记接口)数据库

使用JDK自带的工具jstack找出形成运行程序死锁的缘由编程

编程面试题:编写一个会形成数据库死锁的应用json

JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载设计模式

面试题:用JavaScript开发一个函数,打印非波拉契数列。闭包

咱们只要记住非波拉契数列的计算公式,就不难写出来了:app

F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)webapp

我写的JavaScript代码以下:

var fib = function (a, b) {

   var _current = a + b;

   return {

       current: _current,
 
       next: function () {

            return fib(b, _current);

        }
  }
}

把当前这一轮的计算结果存储到第二行的变量_current里,并经过属性current返回给调用者。返回的json对象除了current属性外,还有另外一个属性next,指向一个闭包函数调用。一旦next指向的函数再次被调用,则会再次触发数列的计算。

var generator = fib(1,1);

// 前一行调用fib(1,1)计算1+1的结果为2,将2存储到_current里经过current属性返回,因此打印2

// 同时返回next函数,函数体为return fib(b, _current); 此时b为1,_current为2

console.log(generator.current);

// 一旦执行next函数,则执行其指向的return fib(b, _current); 1 + 2 = 3

var result = generator.next();

console.log(result.current); // 打印3

若是要打印10个非波拉契数列的值,意味着我要重复调用9次fib函数,太麻烦。因而我写了个函数把fib调用包裹起来。

这个包裹函数有两个输入参数,n为但愿生成非波拉契数列元素的个数,第二个参数sequence接受一个函数。

相关文章
相关标签/搜索