【发布时间】:2016-05-14 13:53:52
【问题描述】:
问题
我知道在我的函数的某个地方,我没有返回我应该返回的东西。
我正在返回递归调用,但似乎我没有返回“一路”
上下文
我正在对列表中的每个组合进行深度优先搜索。一旦达到达到某个条件的组合,我就想返回。
我正在维护我的组合的“状态”,并且正在回溯我应该在哪里(我认为)。
我做错了什么?
class Combo:
def __init__(self, list):
self.staples = list
Combo 有一个名为“staples”的属性,由一系列订书钉类组成。我想遍历决策树中的钉书钉列表以找到最佳数量。
在这种情况下,最佳数量是对列表中每个主要实例的数量求和,并作为 Combo 实例的属性存储/重新计算。
def IterateStaples(combo, target):
#Exit condition for combo dictionary
if all(combo.diff[macro] < 2 for macro in combo.diff):
return combo;
#iterate through all items in list
for staple in combo.staples:
#Increment and calc conditions
staple.increment()
combo.calcTotals()
combo.findDiff(target)
#If exceeds target value, backtrack
if combo.findConflict(target):
staple.decrement()
combo.calcTotals()
combo.findDiff(target)
#Redundant exit condition to try and return
elif all(combo.diff[macro] < 2 for macro in combo.diff):
return combo
#Recursive call
else:
return IterateStaples(combo, target)
staple.decrement()
combo.calcTotals()
combo.findDiff(target)
【问题讨论】:
-
如果不知道
combo和staples对象是什么,这段代码很难理解。 -
很好的反馈,谢谢。我会编辑
标签: python recursion backtracking recursive-backtracking