python递归调用函数时遇到的坑

感谢

https://www.cnblogs.com/my_captain/p/9269141.html

向我解惑,十分感谢!

今天编写一个递归函数的时候遇到了一个问题,有时候调用函数能得到我们想要的结果;但是有时候调用函数的时候却出现bug程序报错,打印调用递归后的数据得到的是[None]。而且在递归函数这边出的错报错信息却是链接到其他函数、其他与你写的递归函数无关的地方。

其实巨佬https://www.cnblogs.com/my_captain/p/9269141.html写的很清楚:

问题:

解决:

"盗用"巨佬的图,全为了给误入歧途的小伙伴们解惑!

我的错误代码:

def get_randtuple(self, node_list, edge_list):
    a, b = 0, 0
    temp_list = []
    temp_set = set()
    rand_tuple = tuple(random.choices(node_list, k=2))
    a = rand_tuple[0]
    b = rand_tuple[1]
    if a == b:
        # 递归1
        self.get_randtuple(node_list, edge_list)
    else:
        # temp_list = edge_list 别使用浅复制
        temp_list = copy.deepcopy(edge_list)
        len_temp_list = len(edge_list)
        temp_list.append(rand_tuple)
        temp_set = sorted(set(temp_list))
        if len(edge_list) == len(temp_set):
            # 递归1
            self.get_randtuple(node_list, edge_list)
        else:
            return rand_tuple

报的错:

return的是None!

修改后的代码:

def get_randtuple(self, node_list, edge_list):
    a, b = 0, 0
    temp_list = []
    temp_set = set()
    rand_tuple = tuple(random.choices(node_list, k=2))
    a = rand_tuple[0]
    b = rand_tuple[1]
    if a == b:
        # 递归1
        return (self.get_randtuple(node_list, edge_list))
    else:
        # temp_list = edge_list 别使用浅复制
        temp_list = copy.deepcopy(edge_list)
        len_temp_list = len(edge_list)
        temp_list.append(rand_tuple)
        temp_set = sorted(set(temp_list))
        if len(edge_list) == len(temp_set):
            # 递归1
            return (self.get_randtuple(node_list, edge_list))
        else:
            return rand_tuple

运行结果:

还是那句话,遇到问题学会自己解决而不是怨天尤人。

猜你喜欢

转载自blog.csdn.net/a_cherry_blossoms/article/details/109134790