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?
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).