0

我不太确定为什么我的递归算法不起作用。我收到以下错误,但我想在我看来我有一个终止点。我知道我忘记了一些简单的事情。

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)
4

3 回答 3

3

您正在使用欧几里德方法的变体来生成三元组。但是,它不会生成所有可能的三元组,因此它显然不会生成解决您的问题所需的三元组。

事实上,没有通用的公式可以生成所有毕达哥拉斯三元组。您需要分析地找到解决方案或蛮力解决它。

于 2013-04-08T16:39:50.617 回答
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)
于 2013-04-08T16:39:58.173 回答
0

你确定递归/欧几里得的方法是做这个的最好方法吗?我记得通过保持总和等于 1000,然后改变两个自变量并检查它们何时相等来做到这一点。(我还使用了某种三角不等式来减少要检查的解决方案的数量,但这不是必需的,因为您最多会检查 100 万种可能性)。

于 2013-04-08T16:48:54.163 回答