Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: GGZ en 21 Febrero 2017, 19:27 PM

Título: Fibonacci - Dynamic Programming.
Publicado por: GGZ en 21 Febrero 2017, 19:27 PM
Quiero escribir esto:

int fib (int n){
       if (n <= 1)
               return n;
       return fib(n-1) + fib(n-2);
}


En programación dinámica es decir sin que se recalculen tantas veces los mismos resultados y usando TOP-DOWN.

Intenté esto:

#define MAX 1000
char mem[MAX];

void start(){
       int i;
       for (i=0; i<MAX; i++)
               mem[i] = -1;
}

int td (int n){

       // Si es igual a -1 significa que todavía no lo resolvimos.
       if (mem[n] == -1){

               if (n <= 1)
                       mem[n] = n;
               else
                       mem[n] = td(n-1) + td(n-2);
       }

       return mem[n];
}


Pero no funciona funciona en los primeros a partir del número 20 tira mal el resultado, ¿alguna pista de por qué no funciona?

Saludos.
Título: Re: Fibonacci - Dynamic Programming.
Publicado por: ivancea96 en 21 Febrero 2017, 21:13 PM
Pusiste la matriz como char:
char mem[MAX];

Un char va de -128 a 127, así que da overflows.

Querrías ponerla como int:
int mem[MAX];
Título: Re: Fibonacci - Dynamic Programming.
Publicado por: GGZ en 22 Febrero 2017, 02:25 AM
Estaba distraído mientras lo programaba, cómo se me pasó eso?, hubiera estado horas buscando el problema en otra parte.

Gracias.