递归函数重复自身而不进入函数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (19)

POST GOT已编辑!(我很抱歉,如果它很复杂,但是你们因为假设你无法获得我的代码而给我投票)

self.Nodes是一组节点,每个节点都有一组节点(从self.Nodes中随机选择)本身存储在相关节点中。

def NodeRel(self, CurAvailables):
    for Node in CurAvailables:
        if Node in  self.availables:
            self.availables.remove(Node)

        if len(Node.relevant) == 0:
            chosen = sample(CurAvailables, randint(1, 2-len(Node.relevant)))

        elif 3 > len(Node.relevant) > 0:
            chosen = sample(CurAvailables, randint(0, 2-len(Node.relevant)))

        else:
            continue

        for item in chosen:
            item.relevant.add(Node)
            Node.relevant.add(item)
            if len(item.relevant) > 1 and item in self.availables:
                self.availables.remove(item)


    def tester(Nody):
        self.test.add(Nody)
        Nody.checked = True
        for relly in Nody.relevant:
            if not relly.checked:
                self.test.add(relly)
                relly.checked = True
                tester(relly)
            if relly.checked:
                self.test.add(relly)


    tester(self.Nodes[0])

    if len(self.test) != len(self.Nodes):
        self.NodeRel(self.Nodes.copy())

在较低的代码中我运行它:

    self.availables = set()
    self.availables.update(self.Nodes)

    # self.RelevantHandler(self.availables)
    self.NodeRel(self.availables.copy())

我希望这个函数继续运行并重复自己,直到len(self.test)和len(self.Nodes)具有相同的长度,但这是结果(在控制台或调试器中):

self.NodeRel()正在重复自身,而不是实际进入self.NodeRel(),我必须在第一次运行时添加它确实进入函数,这是递归不起作用

提问于
用户回答回答于

请问你想要完成什么,而不是说你的代码不起作用。话虽如此

这段代码:

  1. 不应该编译
  2. 什么都不做

def NodeRel("List")是无效的语法。函数定义需要参数的标识符而不是字符串文字。所以它应该是真的def NodeRel(my_list):

第二。你永远不会改变的无论是长度List1还是List2。因此,如果它们以不同的长度开始,那么这段代码将永远运行。在if语句中,您应该将一个随机元素添加到较小的列表中。

扫码关注云+社区

领取腾讯云代金券