gpt4 book ai didi

prolog - 斐波那契递归仿函数

转载 作者:行者123 更新时间:2023-12-02 06:52:54 26 4
gpt4 key购买 nike

我是 Prolog 的初学者,我需要这方面的帮助这个仿函数计算一个数字的斐波那契数......第一次它添加 Y = 0 和 Z = 1 然后它用 Y = Z 和 Z = Y + Z 调用自己并且每次它增加计数器 C 的值直到计数器等于X......问题是结果总是等于 1,因为即使 X 不等于 M,prolog 也不会执行第二个子句,但我不知道为什么......

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

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)

最佳答案

你的第二个子句 fib_tail 有 2 个缺陷:

  • X 永远不会递增
  • NT 是单例,因此不会向调用者“传输”任何值。

编辑注释突出显示 X 不需要递增,与正确递增的 C 进行比较。

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

关于prolog - 斐波那契递归仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13127778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com