感谢
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
运行结果:
还是那句话,遇到问题学会自己解决而不是怨天尤人。