2012-02-21 75 views
2

这是我的函数,重要的一行是我再次调用f()的地方。函数调用不正确的值

def f(num,xyz,possible,temp): 
    y = num%9 
    x = num-y 
    print num 
    for xyz[num] in possible[num]: 
     if ispossibility(temp,xyz[num],x,y) == True: 
      temp[num] = xyz[num] 
      if num != 80: 
       f(num+1,xyz,possible,temp) # i call f() with num incremented 
      else: 
       print 'yes' 
       exit() 

的程序的输出是

0 
1 
2 
3 
4 
5 
6 
7 
8 
3 
2 
3 
3 

的问题是,无论何时函数f()被调用时,变量num应始终通过1但是,从输出中,f(递增)以num的形式被调用为3,此前为8。所以我想知道如何可能(输出应该是9 btw,而不是3),当f()总是调用w/num增加1.我一直在看这个函数一段时间,现在我真的不明白发生了什么事。

+1

什么是参数的初始值。换句话说:你最初的电话是怎样的?它是'f(0,...,...,...)'代替'...'的位置吗?另外:请给我们“可能性”功能。 – Tadeck 2012-02-21 05:54:58

+2

可能[num]中的xyz [num]行是'''打算做什么?我不确定我以前曾见过这种情况。 – DSM 2012-02-21 05:55:55

+0

DSM我正在尝试制作一个数独解算器,所以可能的话,它们各自的盒子都有可能的数字。所以它看起来像这样= [[1,2],[2,4,2] ...]等等,直到可能[80],这有可能为最后一个盒子。在看我的代码后,我相信使用xyz [num]不是必需的,因为我正在调用一个函数,所以变量本来就是本地的。但是如果你不明白xyz [num]是用来尝试所有可能的方块排列的话。我想我现在知道一个更好/更容易理解的方式。所以谢谢帝斯曼 – bab 2012-02-21 19:12:59

回答

4

您可以在回路内呼叫f(num+1, ...),因此可以多次调用f(),其值为num