我正在开发一个递归函数。目前代码很快且很脏,但在优化之前我遇到了一个问题。
一旦递归函数调用结束(我的意思是我的算法向后),case_courante
变量从堆栈弹出到前一个值,但对于数组{{1}不是这种情况}和dernier_match
。我不明白为什么。
这是我的代码:
tour
答案 0 :(得分:1)
因为你重新分配case_courante
:
case_courante = case_courante + categorie[i][tour[i]]
但您只修改tour
和dernier_match
的元素:
dernier_match[i] = case_courante
tour[i] = tour[i] + 1
所以case_courante
一直引用不同的不可变整数,但其他人总是引用他们原来的list
并且从不引用任何其他内容。
<强>更新强>
看起来您的递归函数有两个递归调用站点(两者都相同):
choix(prof+1, case_courante, dernier_match, tour)
我最初的猜测(因为我不知道所需的功能)是传递列表的副本:
choix(prof+1, case_courante, dernier_match[:], tour[:])