JSFiddle - React, Tailwind, and code Playground
by Leandro Amorim
HTML
<div>
<input id="entrada" type="text" value="10" />
<input id="run" type="button" value="Executar" />
</div>
<div id="f1"></div>
<div id="f2"></div>
<div id="f3"></div>
<div id="f4"></div>
<div id="f5"></div>
JavaScript
function fib1(n) {
if (n < 2) return n;
return fib1(n - 1) + fib1(n - 2);
}
function fib2(n) {
var i, f = [0, 1];
for (i = 2; i <= n; i++) f.push(f[i - 1] + f[i - 2]);
return f[n];
}
function fib3(n) {
var i = 1, j = 0, t = j, k = i;
for (; k++ <= n; j = (t = i + (i = j)));
return j;
}
function fib4(n) {
var F = [[1, 1], [1, 0]];
if (n <= 0) return 0;
for (var i = 2; i <= (n - 1); i++)
F = [
[F[0][0] + F[0][1], F[0][0]],
[F[1][0] + F[1][1], F[1][0]]
]
return F[0][0];
}
function fib5(n) {
if (n == 0) return 0;
var F = [[1, 1],[1, 0]];
function exec(i) {
if (i == 0 || i == 1) return;
exec(parseInt(i / 2));
F = [
[F[0][0] * F[0][0] + F[0][1] * F[1][0], F[0][0] * F[0][1] + F[0][1] * F[1][1]],
[F[1][0] * F[0][0] + F[1][1] * F[1][0], F[1][0] * F[0][1] + F[1][1] * F[1][1]]
];
if (i % 2 != 0) F = [
[F[0][0] + F[0][1], F[0][0]],
[F[1][0] + F[1][1], F[1][0]]
]
}
exec(n - 1);
return F[0][0];
}
$(
function () {
$("#run").on('click', function () {
var n = parseInt($("#entrada").val());
var t1 = fib1(n);
var t2 = fib2(n);
var t3 = fib3(n);
var t4 = fib4(n);
var t5 = fib5(n);
console.log(t1);
console.log(t2);
console.log(t3);
console.log(t4);
console.log(t5);
$("#f1").html("fib1 = " + t1);
$("#f2").html("fib2 = " + t2);
$("#f3").html("fib3 = " + t3);
$("#f4").html("fib4 = " + t4);
$("#f5").html("fib5 = " + t5);
});
});