首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >斐波那契递归函数器

斐波那契递归函数器
EN

Stack Overflow用户
提问于 2012-10-30 02:45:56
回答 1查看 865关注 0票数 3

我是一个Prolog的初学者,我想要帮助这个函数器计算一个数字的斐波纳契数…第一次它将Y=0和Z=1相加,然后它称自己为Y=Z和Z=Y+Z,并且每次它都递增计数器C的值,直到计数器等于X.....问题是结果总是等于1,因为prolog从不执行第二个子句,即使X不等于M,但我不知道为什么……

X:要计算的斐波那契数Y:斐波那契数列中的第一个数Z:斐波那契数列中的第二个数C:初始值为0的计数器

T:Y+Z

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-30 05:57:58

您的第二个子句fib_tail有两个缺陷:

  • X从不递增
  • NT是一个单例,因此不会将任何值‘传输’给调用者。

edit注释强调X不需要递增,与正确递增的C进行比较。

我认为您应该在尝试实现双重递归定义之前,并在此工作时优化删除代价高昂的调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13127778

复制
相关文章

相似问题

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