我正在尝试编写一个谓词,它递归地找到某个数字的 n 次方 [A^n = A * A^(n-1)] 并使用快捷方式 A^(2n) = A^n * A^n。
这是迄今为止的解决方案。
p(_,0,1):-!.
p(A,N,R):-N mod 2=0,!,N1=N/2,p(A,N1,R1),R=R1*R1.
p(A,N,R):-N1=N-1,p(A,N1,R1),R=R1*A.
现在我想让这个尾递归。我可以为简单的情况做tail,例如没有捷径的阶乘和幂(通过添加一个累加器),但这很难。
任何帮助深表感谢!