我正在为一个问题编写dfs解决方案
当我编写如下代码时,在调试时,我发现每当 到达self.dfs\u solution\u rework,而不是递归,它只是继续执行,导致错误的结果:
def dfs_solution_rework(self, end, start= 1, sorted=False, num= None):
if not num:
for i in range(1, 10):
self.dfs_solution_rework(end, start, num=i)
elif num <= end:
if num >= start:
yield num
last_digit = num % 10
if not (last_digit == 0 or last_digit == 9):
self.dfs_solution_rework(end, start, num=num * 10 + (last_digit - 1))
self.dfs_solution_rework(end, start, num=num * 10 + (last_digit + 1))
elif last_digit == 0:
self.dfs_solution_rework(end, start, num=num * 10 + 1)
else:
self.dfs_solution_rework(end, start, num=num * 10 + 8)
另一方面,如果我用util(helper)方法编写dfs,如下所示,它就可以正常工作
def dfs_solution(self, end, start= 1, sorted=False, num= None):
def dfs_util(end, start, num):
if num <= end:
if num >= start:
print(num)
last_digit = num % 10
if not (last_digit == 0 or last_digit == 9):
dfs_util(end, start, num=num * 10 + (last_digit - 1))
dfs_util(end, start, num=num * 10 + (last_digit + 1))
elif last_digit == 0:
dfs_util(end, start, num=num * 10 + 1)
else:
dfs_util(end, start, num=num * 10 + 8)
for i in range(1, 10):
dfs_util(end, start, num=i)
关于为什么会发生这种行为有什么帮助吗?我已经在VS代码中调试了它以理解它,但是没有任何想法
附言:不是作业问题。:)
谢谢
递归生成器需要生成递归的结果
与您的问题相同的简化示例是递归计数器:
它只产生一个值:
n
。这是因为对count_to_zero(n-1)
的递归调用刚刚创建了一个从未使用过的生成器测试:
这里的解决方案是:
测试:
在您的示例中也需要这样做,对于每个对
self.dfs_solution_rework
的递归调用,例如Python2
请注意,这个语法在Python2中不起作用
与以下内容相同:
相关问题 更多 >
编程相关推荐