JSFiddle - React, Tailwind, and code Playground

by mgibsonbr

HTML

<input><button>Calcular</button>
    <div id="out"></div>

JavaScript

var fib = function(classe, soma) {
    var sequencia = [new classe(1), new classe(1)];
    var serie = [new classe(1), new classe(2)];

    function atualiza(n) {
        var len = sequencia.length;
        while ( n > len ) {
            sequencia.push(soma(sequencia[len-1], sequencia[len-2]));
            serie.push(soma(serie[len-1], sequencia[len]));
            len++;
        }
    }

    return {
        n_esimo:function(n)   { atualiza(n); return sequencia[n-1];       },
        sequencia:function(n) { atualiza(n); return sequencia.slice(0,n); },
        serie:function(n)     { atualiza(n); return serie[n-1];           }
    }
};

var fibn = fib(Number, function(a,b) { return new Number(a + b); });

$("button").click(function() {
    var n = parseInt($("input").val(), 10);
    $("#out").append("<p>" + fibn.sequencia(n) + "</p>");
});