我是一个Prolog的初学者,我想要帮助这个函数器计算一个数字的斐波纳契数…第一次它将Y=0和Z=1相加,然后它称自己为Y=Z和Z=Y+Z,并且每次它都递增计数器C的值,直到计数器等于X.....问题是结果总是等于1,因为prolog从不执行第二个子句,即使X不等于M,但我不知道为什么……
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)
发布于 2012-10-30 05:57:58
您的第二个子句fib_tail有两个缺陷:
edit注释强调X不需要递增,与正确递增的C进行比较。
我认为您应该在尝试实现双重递归定义之前,并在此工作时优化删除代价高昂的调用。
https://stackoverflow.com/questions/13127778
复制相似问题