【发布时间】:2013-11-12 21:50:46
【问题描述】:
我必须编写一个 Prolog 程序来计算阶乘函数的逆而不使用除法。我还得到了注释:“函数的逆不一定是函数”。我把它作为一个正常的阶乘谓词..
fact(0,1).
fact(N,F) :- N>0, N1 is N-1, fact(N1,F1), F is N * F1.
我在其他一些帖子上读到过,您应该可以只切换参数,但这个版本似乎并非如此。谁能帮我找出原因?
【问题讨论】:
-
因为
N>0要求N是基础算术值。N1 is N-1bit 也是如此。 -
这句话的意思是调用
invfact(X,1)应该成功两次。对吗? -
我相信是的。所以我必须改变函数的主体?
-
我会使用你的
fact更改为生成谓词 - 这样会生成一个给定值的阶乘列表 - 因为对更好,(N, F) 其中 F 是 N! - 然后从末尾搜索该列表以查找我的索引。 -
我对 Prolog 很陌生。是否可以为我指明如何完成此任务的正确方向?