int fiboEficiente (int n, Dictionary<int,int> valoresYaCalculados)
{
if (valoresYaCalculados.ContainsKey(n)) // si el valor ya lo calculastes => devolves el valor
{
return valoresYaCalculados[n];
}
// Calculo por primera y unica vez el fibo n usando la primera
int fiboN = fiboEficiente (n-1,valoresYaCalculados) + fiboEficiente (n-2,valoresYaCalculados);
valoresYaCalculados.Add(n,fiboN ); // Agrego el resultado de fibo de n para no volver a calcularlo
return fiboN; // retorno el fibo de n
}