Foro de elhacker.net

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:

Código
  1. int fib (int n){
  2.        if (n <= 1)
  3.                return n;
  4.        return fib(n-1) + fib(n-2);
  5. }
  6.  

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

Intenté esto:
Código
  1. #define MAX 1000
  2. char mem[MAX];
  3.  
  4. void start(){
  5.        int i;
  6.        for (i=0; i<MAX; i++)
  7.                mem[i] = -1;
  8. }
  9.  
  10. int td (int n){
  11.  
  12.        // Si es igual a -1 significa que todavía no lo resolvimos.
  13.        if (mem[n] == -1){
  14.  
  15.                if (n <= 1)
  16.                        mem[n] = n;
  17.                else
  18.                        mem[n] = td(n-1) + td(n-2);
  19.        }
  20.  
  21.        return mem[n];
  22. }
  23.  

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:
Código
  1. char mem[MAX];

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

Querrías ponerla como int:
Código
  1. 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.