Search code examples
prologfibonaccitail-recursion

Calculate Fibonacci Serie in Prolog, Tail Recursive


I want to calculate Fibonacci Series in Prolog,in recursive tail mode.

fibonacci(0,0).
fibonacci(1,1).
fibonacci(N,Result) :-
   fibonacci(N,1,0).

fibonacci(N,Result,Count) :-
   Count < N,
   !,
   Count1 is Count + 1,
   Result1 is  Result + Count,
   fibonacci(N,Result1,Count1).  
fibonacci(N,Count,Count).

but the result is incorrect,what is the problem?


Solution

  • In the line Result1 is Result + Count you only add the Count the variable Result and add 0,1,2,... but in fibonacci you need to add two previous e.g 0,1,(1+0=1),(1+1=2),.... I suggest this implementation:

    fib(0, 0).
    fib(1, 1).
    fib(N,Result):-fibonacci(N,0,1,Result).
    
    fibonacci(0,N,_,N).
    fibonacci(N, Prev1,Prev2,Result):-
       N>0,
       New_Prev2 is Prev1+Prev2,
       N1 is N-1,
       fibonacci(N1,Prev2,New_Prev2,Result).