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.