首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算Prolog中的Fibonacci意境,尾部递归

计算Prolog中的Fibonacci意境,尾部递归
EN

Stack Overflow用户
提问于 2016-10-15 14:05:57
回答 2查看 6.2K关注 0票数 2

我想在Prolog中以递归尾模式计算Fibonacci级数。

代码语言:javascript
运行
复制
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).

但是结果是不正确的,有什么问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-15 14:25:13

Result1 is Result + Count行中,只添加变量结果并添加0、1、2、.但是在fibonacci中,您需要添加两个先前的例子,例如0,1,(1+0=1),(1+1=2),.我建议这样做:

代码语言:javascript
运行
复制
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).
票数 4
EN

Stack Overflow用户

发布于 2017-03-01 14:32:30

这里是一个尾部递归solution.You需要使用累加器。实际上,你是在向后计算斐波纳契。当你到了1点,你就停下来。

代码语言:javascript
运行
复制
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).
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40059986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档