sucesiĆ³n sucesion serie recursivo recursividad recursiva prueba funcion escritorio ejemplos algoritmo prolog fibonacci

prolog - serie - sucesion de fibonacci recursividad java



functor recursivo fibonacci (1)

Soy un principiante de Prolog y quiero ayuda con esto. Este functor calcula el número de fibonacci de un número ... la primera vez agrega Y = 0 y Z = 1 y luego se llama a sí mismo con Y = Z y Z = Y + Z y cada uno tiempo aumenta el valor del contador C hasta que el contador es igual a X ..... el problema es que el resultado siempre es igual a 1 porque prolog nunca ejecuta la segunda cláusula, incluso si X no es igual a M, pero no sé por qué .....

X: el fibonacci a calcular Y: el primer número en la serie de Fibonacci Z: segundo número en la serie de Fibonacci C: contador con 0 como valor inicial
T: Y + Z

predicates fib_tail(integer,integer, integer,integer, real) clauses fib_tail(X,Y , Z,M, T):- X=M,T = Y + Z,!. fib_tail(X,Y ,Z, C , T):- T = Y + Z, NY = Z, NZ = Y + Z, NC = C + 1, fib_tail(X, NY, NZ, NC, NT). goal fib_tail(5 ,0 ,1 ,0, T)


su segunda cláusula fib_tail tiene 2 defectos:

  • X nunca se incrementa
  • NT es un singleton, por lo tanto, no ''transmite'' ningún valor a la persona que llama.

edite el comentario resalte que X no necesita ser incrementado, siendo comparado con el C.

Creo que antes debería intentar implementar la definición doblemente recursiva y, cuando esté funcionando, optimizar la eliminación de la llamada costosa.