我想在Prolog中以递归尾模式计算Fibonacci级数。
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).
但是结果是不正确的,有什么问题呢?
发布于 2016-10-15 14:25:13
在Result1 is Result + Count
行中,只添加变量结果并添加0、1、2、.但是在fibonacci中,您需要添加两个先前的例子,例如0,1,(1+0=1),(1+1=2),.我建议这样做:
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).
发布于 2017-03-01 14:32:30
这里是一个尾部递归solution.You需要使用累加器。实际上,你是在向后计算斐波纳契。当你到了1点,你就停下来。
fibonacci(0,0).
fibonacci(N, Result):-
N > 0,
fib(N,0,1,Result).
fib(1,_,Accum, Accum).
fib(N,Val,Accum,Result) :-
N1 is N-1,
AccumNew is Val +Accum,
fib(N1, Accum,AccumNew,Result).
https://stackoverflow.com/questions/40059986
复制相似问题