Turbo Prolog实现斐波那契数列(Fibonacci Series)代码运行报错问题
Turbo Prolog斐波那契代码报错修复方案
原代码核心问题
- 结果变量未绑定:递归子句头定义为
fibo(X,N),但计算出斐波那契结果F后没有将X与F绑定,导致自由变量报错 - 算术运算逻辑错误:Prolog中
=为项统一操作,不是算术赋值,要计算表达式结果需要使用is关键字,原代码F=F1+F2不会执行加法运算,只会尝试对复合项做统一 - 输出逻辑位置错误:输出语句写在递归子句中,会输出大量重复的中间计算值,无法得到正确的数列输出结果
- 参数逻辑不清晰:谓词参数的含义没有统一,调用时很容易出现参数顺序颠倒导致的逻辑错误
修复后可运行代码
predicates % 第一个参数为斐波那契项数N,第二个参数为对应的计算结果 fibo(integer, integer) % 输出第0项到第Max项的斐波那契数列 print_fibo(integer, integer) clauses % 终止条件 fibo(0, 0). fibo(1, 1). % 递归逻辑 fibo(N, F):- N > 1, N1 = N - 1, N2 = N - 2, fibo(N1, F1), fibo(N2, F2), F is F1 + F2. % 遍历输出逻辑 print_fibo(Current, Max):- Current =< Max, fibo(Current, Res), write(Res), (Current = Max -> write(".") ; write(", ")), Next = Current + 1, print_fibo(Next, Max). print_fibo(_, _).
调用示例
如果需要输出前10项(第0到第9项)斐波那契数列,执行语句:print_fibo(0,9)
输出结果为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
内容的提问来源于stack exchange,提问作者Prashant Aghara
相关产品推荐
相关产品推荐

