Comparando
bueno gente, volviendo al tema ya que no lo hice antes por vagancia. me he fijado que -o asi lo aparenta- cada uno de los que participamos enfocamos la solucion mas o menos de la misma forma, y estoy casi seguro que mas de uno de los que intentaron participar pensaron la solucion de la misma forma. claro, mi codigo no se parece mucho a los expuestos por caricatos y nahuel. pero como ya habia comentado, no era el unico codigo que habia intentado. a continuacion la primera solucion que se me habia cruzado. no parece tan obvio pero si lo analizan veran que la computacion se realiza digito por digito.
Código:
m = {0:"0", 1:"1"};
fib = function(n){
if(!m.hasOwnProperty(n)) m[n] = sum(fib(n - 1), fib(n - 2));
return m[n];
}
sum = function(a, b){
function n(d){
return isNaN(d)? 0: Number(d);
}
a = a.replace(/^0*/, "").split('').reverse();
b = b.replace(/^0*/, "").split('').reverse();
var length = Math.max(a.length, b.length);
for(var i = 0, tenth = 0, result = ""; i < length; i++){
var sum = (n(a[i]) + n(b[i]) + Number(tenth)).toString().match(/(\d*)(\d)/);
result = sum[2] + result;
tenth = sum[1];
}
return tenth + result;
}
Comentario
del codigo de nahuel2k digo casi lo mismo que caricatos. lo que no me agrada es el uso excesivo de eval. mi desagrado no es tanto porque eval sea evil, sino porque eval es lento en procesar aparte de que casi siempre existe una forma alternativa para realizar lo mismo sin necesidad de eval.