我正在查看深度限制搜索的伪代码实现,而我无法理解它。
伪代码是:
Function Recursive-DLS(node, problem, limit)
cutoff-occurred? = false
if Goal-Test(problem, State[node]) then return node
else if Depth[node] = limit then return cutoff
else for each successor in Expand(node, problem) do
result = Recursive-DLS(successor, problem, limit-1)
if result = cutoff then cutoff-occurred? = true
else if result != failure then return result
if cutoff-occurred? then return cutoff else return failure
我主要是难以理解每个继任者以限制-1重复算法的原因。有人可以和我一起经历这个吗?哈哈有一些图形解释。
与此同时,我会考虑其他来源。谢谢你的阅读!
答案 0 :(得分:1)
伪代码似乎是错误的。 (如果节点深度/限制值相互跳过 - 在每次递归调用中同时增加和减少,则实际上可能永远不会遇到基本情况。)
递归案例是用limit - 1
编写的,因此可以达到基本案例(而不是“限制”,认为“剩余”)。
但是,限制的基本情况是if Depth[node] = limit then return cutoff
。根据David Chan的建议,它应该是if 0 = limit then return cutoff
,这与递归案例中的limit - 1
一致。
或者,只需在递归情况下传递limit
并保留当前的基本情况。