有人可以帮助我找到一种方法来获得Prolog中的反因子...
例如inverse_factorial(6,X)
===> X = 3
.
我一直在努力工作.
我目前有阶乘,但我必须让它可逆.请帮我.
我无法理解以下因子程序
fact1(0,Result) :-
Result is 1.
fact1(N,Result) :-
N > 0,
N1 is N-1,
fact1(N1,Result1),
Result is Result1*N.
Run Code Online (Sandbox Code Playgroud)
什么时候fact1
被称为嵌套在第二行fact1
,这是不是意味着最后一行,Result is Result1*N.
永远不会被调用?或者在Prolog中,最后一行是在递归调用之前执行的吗?
我有以下prolog代码片段:
num(0).
num(X) :- num(X1), X is X1 + 1.
fact(0,1) :-!.
fact(X,Y) :- X1 is X-1, fact(X1,Y1), !, Y is Y1 * X.
fact(X) :- num(Y), fact(Y,X).
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么以下命令导致堆栈溢出?提前致谢.
fact(6).
Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一个关于广义Fibonacci序列(GFS)的查询的解决方案.查询是:是否有任何GFS有885作为他们的第12个数字?最初的2个数字可以限制在1到10之间.
我已经找到了在序列中找到第N个数字的解决方案,该序列从(1,1)开始,我明确定义了初始数字.以下是我对此的看法:
fib(1, 1).
fib(2, 1).
fib(N, X) :-
N #> 1,
Nmin1 #= N - 1,
Nmin2 #= N - 2,
fib(Nmin1, Xmin1),
fib(Nmin2, Xmin2),
X #= Xmin1 + Xmin2.
Run Code Online (Sandbox Code Playgroud)
对于上面提到的查询,我认为以下方法可以解决这个问题,我将重用fib方法而不明确定义初始数字,因为现在需要动态完成:
fib(N, X) :-
N #> 1,
Nmin1 #= N - 1,
Nmin2 #= N - 2,
fib(Nmin1, Xmin1),
fib(Nmin2, Xmin2),
X #= Xmin1 + Xmin2.
fib2 :-
X1 in 1..10,
X2 in 1..10,
fib(1, X1),
fib(2, X2),
fib(12, 885).
Run Code Online (Sandbox Code Playgroud)
......但这似乎不起作用.
这种方式不可能定义初始数字,还是我做了一些非常错误的事情?我不是要求解决方案,但任何可以帮助我解决这个问题的建议都将非常感激.