2012-02-21 4 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 나는 스도쿠 솔버를 만들기 위해 노력하고 있으므로 가능한 모든 숫자가 각각의 상자에 포함됩니다. 따라서 가능한 마지막 상자의 가능성을 가진 가능한 [80]까지 [[1,2], [2,4,2] ...] 등이 가능한 것처럼 보입니다. 내 코드를 살펴본 후, xyz [num]를 사용하는 것이 필요하지 않다는 것을 알았습니다. 저는 함수를 호출하므로 변수가 로컬이 될 것입니다. 그러나 당신이 xyz를 이해하지 못한다면 [num]은 상자의 가능한 모든 순열을 시도하는 데 사용됩니다. 나는 내가 지금하고있는 더 나은/이해할 수있는 방법을 안다고 생각한다. DSM에 감사드립니다. – bab

답변

4

f(num+1, ...)을 루프 내부에 호출하므로 f()num에 여러 번 호출 할 수 있습니다.

관련 문제