Python递归函数似乎丢失了一些变量值

时间:2013-01-25 19:10:40

标签: python function variables recursion

我有4x4的信件表,我想在那里找到所有可能的路径。他们是言语的候选人。我对变量“used”有问题它是一个列表,其中包含路径已经存在的所有位置,因此它不会再次出现。每条路径都应该有一个used-list。但它无法正常工作。例如,我有一个打印当前单词和used-list的测试打印。有时这个词只有一个字母,但路径已遍历所有16个单元格/索引。

大小为8的for循环适用于所有可能的方向。主函数执行16次追踪功能 - 每个可能的起点执行一次。移动到特定方向后,移动功能返回指示。 is_allowed测试是否允许移动到某个部门。 样本输入:oakaoastsniuttot。 (4x4表,前4个字母是第一行等) 示例输出:可以在某个单词的字典中找到的所有真实单词 在我的情况下,它可能输出一个或两个单词,但几乎不是全部,因为它认为一些单元格被使用,尽管它们不是。

def chase(current_place, used, word):

   used.append(current_place)   #used === list of indices that have been used
   word += letter_list[current_place]
   if len(word)>=11:
       return 0
   for i in range(3,9):
       if len(word) == i and word in right_list[i-3]:  #right_list === list of all words
        print word
        break
   for i in range(8):
      if is_allowed(current_place, i) and (move(current_place, i) not in used):    
          chase(move(current_place, i), used, word)

1 个答案:

答案 0 :(得分:1)

问题在于只传递了一个used列表。您有两种方法可以在chase()中修复此问题:

  1. 制作used的副本并使用该副本。
  2. 在从函数返回之前,撤消在开始时完成的append()