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 に答える