2012-02-21 20 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からインクリメントされなければならないということです)は以前に8だったときにnumを3として呼び出されます。そして、f()が常に1でインクリメントされたw/numと呼ばれるとき、それが可能な方法(出力は9 btwでなく3でなければなりません)が不思議です。私は今この関数をいくつかの時点で見てきました。何が起こっているのか理解していない。

+1

引数の初期値は何ですか?言い換えれば、あなたの最初の呼び出しはどのように見えますか?それは 'f '(0、...、...、...)'の代わりに何か?また、私たちに 'ispossibility'関数を与えてください。 – Tadeck

+2

可能な[num]: 'でxyz [num]の行は何行目ですか?私はこれまでにそれを見たことがあるか分からない。 – DSM

+0

DSM私はスドクソルバーを作ろうとしているので、それぞれのボックスに可能な数字がすべてあります。だから、この可能性= [[1,2]、[2,4,2] ...]など可能な限り[80]、最後のボックスの可能性があります。私のコードを見た後、私はxyz [num]を使うことは必要ではないと考えています。私は関数を呼び出していますので、変数はローカルになります。しかし、あなたが理解できない場合には、xyz [num]は可能な限りボックスのすべての可能な順列を試すために使用されます。私は今、それをもっとよく理解できる方法を知っていると思います。だからDSMに感謝する – bab

答えて

4

f(num+1, ...)をループ内にコールすると、f()と同じ値のnumを複数回呼び出すことができます。

関連する問題