【问题标题】:tail recursion sum, power, gcd in prolog?prolog中的尾递归和,功率,gcd?
【发布时间】:2009-10-12 14:53:25
【问题描述】:

我怎样才能做到这一点:

给出以下每个谓词的尾递归定义。
power(X,Y,Z):XY=Z。
gcd(X,Y,Z):X 和 Y 的最大公约数是 Z。
@987654323 @:Sum 是 L 中元素的总和。

到目前为止我已经这样做了,但不确定是否正确

power(_,0,1) :- !.
power(X,Y,Z) :- Y1 is Y - 1,power(X,Y1,Z1),Z is X * Z1.

sum(void,0).
sum(t(V,L,R),S) :- sum(L,S1),sum(R,S2),  S is V + S1 + S2.

【问题讨论】:

  • 如果您不确定它是否正确,请测试它。
  • Frank:如果您将文本缩进 4 个空格,它会将其格式化为代码。编辑您的问题并尝试一下。编辑器工具栏中的橙色问号链接到具有其他格式标记的文档。

标签: recursion prolog tail-recursion greatest-common-divisor


【解决方案1】:

这些不是尾递归的。您可以使用累加器编写尾递归变体,请参阅this answer

你的总和在一棵树上,这是不寻常的,通常会使用一个列表。在 Prolog 中,[] 是空列表,[X|R] 是具有头部 X 和尾部 R 的非空列表的模式。

【讨论】:

  • 先生,你能帮我用递归的方式写出力量吗?我刚开始学习它,做不到。请至少帮助我其中一个。谢谢弗兰克
  • 这是你的作业,不是我的。我什至不是你的导师。对不起,我不会给你具体的解决方案,你应该学会自己思考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2011-06-30
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多