检查所有列表元素的所有元素是否满足某些属性

时间:2014-01-20 18:56:26

标签: python recursion

给定长度为n的二进制字符串列表,其中一些是代码字。

在主例程内部,如果满足某些条件,我想在代码字列表中添加一个元素。算法的相关部分可以写成:从列表开始只有一个代码字添加到此列表的元素(从所有可能的字符串列表中),如果它与第一个代码字的距离至少为d,那么为了添加接下来我们必须在原始列表中找到第一个这样的字符串,这两个已添加的代码字的距离再次至少为d。对于第四个元素也是如此 - 它与已经找到的代码字的距离应至少为d。等等...

使用递归,我编写了以下代码,其结尾为“RuntimeError:调用Python对象时超出了最大递归深度”

我做错了什么? (我是一个python新手)

def helper(n,d,strings,codes,lastIndex):
    for i in range(lastIndex,n):
        distanceCheckSatisfied = True
        for j in range(len(codes)):
            if ( not(hammingDistance(codes[j],strings[i]) >= d) or not(distanceCheckSatisfied) ):
                distanceCheckSatisfied = False
            if (distanceCheckSatisfied):
                codes.append(strings[i])
                helper(n,d,strings,codes,i)
                break;
                break;

1 个答案:

答案 0 :(得分:2)

永远不会达到您的第二个break - Python break语句会立即突破最里面的forwhile循环。这意味着您的外部 for循环仍在运行。

修复它应该摆脱大量的递归调用。

关于半相关的风格指南主题:

  • 你不应该在Python中使用分号。
  • 围绕if陈述条件的括号是不必要的,除非您使用它们将您的条件分散到多行,否则应该避免使用括号。
  • not是一个运算符,而不是函数 - 使用not x而不是not(x)
相关问题