フィボナッチ数を求める関数

求める公式があったとは…
一般的な再帰による求め方をする必要がないのでよいのかもしれない。
マイナスの引数にも対処してみた。

(function () {
  // フィボナッチ関数
  var round = Math.round;
  var pow = Math.pow;
  var sqrt5 = Math.sqrt (5);
  var goldR = (1 + sqrt5) / 2;

  function fibonacci (n) {
    return (n < 0)
    ? round (pow (goldR, -n) / sqrt5) * ((n&1) ? 1: -1)
    : round (pow (goldR, n) / sqrt5);
  }

  this.fibonacci = fibonacci;
}) ();

console.log (
[-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6].map (fibonacci)
);