Recursion 使用递归计算表达式的阶乘(Prolog)

Recursion 使用递归计算表达式的阶乘(Prolog),recursion,prolog,Recursion,Prolog,所以我有一个关于Prolog递归的问题。我必须创建一个递归规则factfunc(F,X,Y,N)来查找((2X+3Y)^(N))。我必须使用我已经实现的另外两个规则来实现这个规则(对它们进行了测试,并且它们都正常工作。我必须使用的两个规则是expfunc(Y,X,N)递归计算Y=X^N和compfunc(R,X,Y,N)计算R=(2X+3Y)^(N)。在我的factfunc实现中,我知道我不必直接使用expfunc,因为我的compfunc规则已经使用了它。也就是说,我尝试使用factfunc(

所以我有一个关于Prolog递归的问题。我必须创建一个递归规则factfunc(F,X,Y,N)来查找((2X+3Y)^(N))。我必须使用我已经实现的另外两个规则来实现这个规则(对它们进行了测试,并且它们都正常工作。我必须使用的两个规则是expfunc(Y,X,N)递归计算Y=X^Ncompfunc(R,X,Y,N)计算R=(2X+3Y)^(N)。在我的factfunc实现中,我知道我不必直接使用expfunc,因为我的compfunc规则已经使用了它。也就是说,我尝试使用factfunc(F,X,Y,N)规则:

我多次使用我的代码 这对我来说是合乎逻辑的,然而,当我测试规则时,我一直收到一个“否”的输出。我希望有人至少能推动我朝着正确的方向写这个规则


一如既往,感谢您的帮助:)

那么函数
((2x+3y)^n)到底有多精确是否可以递归表示?你能用数学来写吗?基本情况是什么,步骤是什么?它可以分解为子函数(您已经部分完成了),可以递归表示,但不能表示整个函数。此规则的基本情况是当n=0时,它可以数学表示为F=n*(n-1)!,式中n=(2X+3Y)^n您在这里完全把事情搞混了。你现在谈论的
n
完全不是问题中的
n
。在问题中,
N
表示功率。在您的注释中,它是阶乘函数的一个参数。阶乘函数可以递归计算,但它只是函数的一部分,这正是我所说的。谢谢澄清。我理解它应该如何在数学上工作,并且理解如何递归地定义它,然而,我仍然在理解如何着手修复我的代码方面有点困难。我会继续努力的在递归中,您需要一个终止案例。你的代码中没有<代码>N1是N-1
继续减少
N
,但目的是什么?
factfunc(F,X,Y,N) :-
    compfunc(F1,X,Y,N),
    N1 is N-1,
    factfunc(F1,X,Y,N1),
    F is N*F1.