Python 为什么我的递归不起作用?警告:项目欧拉扰流器

Python 为什么我的递归不起作用?警告:项目欧拉扰流器,python,algorithm,recursion,Python,Algorithm,Recursion,我不太清楚为什么我的递归算法不起作用。我得到了下面的错误,但是,我想在我看来,我有一个终止点。我知道我忘记了一些简单的事情 运行时错误:超过最大递归深度 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

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

运行时错误:超过最大递归深度

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)

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


事实上,并没有通用的公式来生成所有的勾股三元组。你需要从分析的角度找到解决方案,或者强迫它

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


事实上,并没有通用的公式来生成所有的勾股三元组。你需要从分析的角度找到解决方案,或者强迫它

检查是否大于或等于

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)

检查是否大于或等于

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)


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

你确定递归/欧几里德的方法是最好的方法吗?我记得这样做的方法是将总和保持为1000,然后改变两个自变量,并检查它们是否相等。(我还使用了某种三角形不等式来减少要检查的解的数量,但这并不是必需的,因为最多只能检查一百万个可能性)

如果没有
n
存在
a+b+c==1000
?是的,这就是问题所在,我的朋友亚历克斯,唯一的解决办法是当a+b+c==1000时,如果a+b+c>1000,你可以安全地停止搜索你的三元组。Python不识别尾部递归,你的方法是自然迭代的。这是为迭代而做的,而不是递归。如果不存在
n
,而
a+b+c==1000
?是的,这就是问题所在,我的朋友Alex,唯一的解决方法是当a+b+c==1000时,如果a+b+c>1000,您可以安全地停止搜索您的三元组。Python不识别尾部递归,您的方法是尽可能自然地迭代。这是为迭代而做的,不是递归。
a*b*c
被视为问题的解决方案-如果
a+b+c>1000
,则应添加另一个条件以返回错误值,如-1。另外,这解决了递归错误,但不是问题本身。我不知道它试图解决什么问题,但问题是“为什么我的递归不工作?”,因为它没有出路,除非a+b+c正好是1000,所以这解决了递归错误,问题本身与问题完全不同。
a*b*c
被视为问题的解决方案-您应该添加另一个条件以返回错误值,如-1 if
a+b+c>1000
。此外,这解决了递归错误,但不是问题本身。我不知道它试图解决什么问题,但问题是“为什么我的递归不工作?”,因为它没有出路,除非a+b+c正好是1000,所以这解决了递归错误,问题本身是一个与所问完全不同的问题。当然。同样,重复别人所说的,这个问题需要迭代而不是递归。同样,重复其他人所说的,这个问题需要迭代而不是递归。