我不太确定为什么我的递归算法不起作用。我得到以下错误,但我想在我的脑海里看来我有一个终止点。我知道我忘记了一些简单的事情。
RuntimeError:超出最大递归深度
def triplet(n):
a = (2*n) +1
b = (2*n)*(n+1)
c = (2*n)*(n+1) +1
if a+b+c == 1000:
return a*b*c
elif a+b+c > 1000:
return 'no triplet found'
else:
return triplet(n+1)
print triplet(1)
答案 0 :(得分:3)
您正在使用Euclid方法的变体来生成三元组。但是,它不会产生所有可能的三元组,因此它显然不会产生解决问题所需的三元组。
事实上,没有通用公式来生成所有毕达哥拉斯三元组。您需要分析性地找到解决方案或强制它。
答案 1 :(得分:2)
检查大于或等于
def triplet(n):
a = (2 * n) + 1
b = (2 * n) * (n + 1)
c = (2 * n) * (n + 1) + 1
if a + b + c >= 1000:
return a * b * c
else:
return triplet(n + 1)
print triplet(1)
答案 2 :(得分:0)
你确定递归/ euclid的方法是做这个的最佳方法吗?我记得这样做是通过保持总和等于1000,然后改变两个自变量并检查它们何时相等。 (我也使用某种三角不等式来减少要检查的解决方案的数量,但这不是必要的,因为最多你将检查100万种可能性)。