递归回溯算法期间变量未更改
Posted
技术标签:
【中文标题】递归回溯算法期间变量未更改【英文标题】:Variable not being changed during recursive backtracking algorithm 【发布时间】:2019-07-08 16:02:56 【问题描述】:我正在使用递归和回溯来解决问题。每当满足某个条件时,我都会更新名为 minimum
的变量。然而,尽管minimum
变量在函数返回时被多次更新,minimum
仍然设置为其原始值。
我不明白为什么,因为我传递了对内存中同一位置的引用,并在遇到基本情况时更新它。
def minCost(self, costs: List[List[int]]) -> int:
depth, cost, prev_index, minimum = 0, 0, None, 10000
def min_cost_recur(depth, cost, prev_index, n, minimum, costs):
if depth == n:
minimum = min(minimum, cost)
return
original_prev_index = prev_index*1
for i in range(0, 3):
if not i == original_prev_index:
cost += costs[depth][i]
depth += 1
prev_index = i
min_cost_recur(depth, cost, prev_index, n, minimum, costs)
depth-=1
cost -= costs[depth][i]
prev_index = original_prev_index
min_cost_recur(depth, cost, -1, len(costs), minimum, costs)
return minimum
【问题讨论】:
【参考方案1】:您应该在递归中返回 minimum
的新值,否则它将永远不会更新:
def minCost(self, costs: List[List[int]]) -> int:
depth, cost, prev_index, minimum = 0, 0, None, 10000
def min_cost_recur(depth, cost, prev_index, n, minimum, costs):
if depth == n:
minimum = min(minimum, cost)
return minimum
original_prev_index = prev_index*1
for i in range(0, 3):
if not i == original_prev_index:
cost += costs[depth][i]
depth += 1
prev_index = i
minimum = min(minimum, min_cost_recur(depth, cost, prev_index, n, minimum, costs))
depth-=1
cost -= costs[depth][i]
prev_index = original_prev_index
return minimum
minimum = min_cost_recur(depth, cost, -1, len(costs), minimum, costs)
return minimum
这是因为minimum
不是通过引用传递,而是通过值传递,因为它是不可变类型的实例。当您在递归中修改其值时,它只是为最小值创建一个本地 nmae,而不是从父范围更改变量。
【讨论】:
我不知道整数在 Python 中是不可变的。谢谢。以上是关于递归回溯算法期间变量未更改的主要内容,如果未能解决你的问题,请参考以下文章