0

我正在尝试自己实现斐波那契数列。这就是我所拥有的:

fibo2(N, F) :-
    fibo2(0, 1, 0, N, F).

fibo2(N-F, F, N-1, N, F).

fibo2(P, S, C, N, F) :-
    C < N,
    T is S,
    S1 is P + S,
    C1 is C + 1,
    fibo2(T, S1, C1, N, F).

我知道还有其他实现,但我不知道为什么这不起作用。当我进行跟踪时,fibo2(3, 2)我认为这个调用应该是真的:

fibo2(1, 2, 2, 3, 2) ? creep

但它返回错误...一些帮助将不胜感激

4

1 回答 1

1

首先,这T is S条线毫无用处。当您不需要执行算术运算时,更喜欢使用标准统一与(=)/2. 在这里,您可以直接调用fibo2(S, S1, C1, N, F).

然后,您的递归没有基本情况。will的第一个子句在fibo2/5这里永远不成立。

你的意思当然是:

fibo2(P, S, C, N, F) :-
    P is N - F,
    S is F,
    C is N - 1.

这里将执行算术(在头部进行统一时,不执行算术,操作完全是象征性的)。

我不确定你的NF代表什么,所以我不会进一步评论你的代码,但这应该已经解决了一些问题。

于 2013-04-22T23:42:14.630 回答