2013-10-13 2 views
-1
a="003020600900305001001806400008102900700000008006708200002609500800203009005010300" 
b=[] 
def same_row(i,j): return (i/9 == j/9) 
def same_col(i,j): return (i-j) % 9 == 0 
def same_block(i,j): return (i/27 == j/27 and i%9/3 == j%9/3) 
def r(a): 
    i = a.find('0') 
    if i == -1: 
     b.append(a) 
     return a 

    excluded_numbers = set() 
    for j in range(81): 
    if same_row(i,j) or same_col(i,j) or same_block(i,j): 
     excluded_numbers.add(a[j]) 

    for m in '123456789': 
    if m not in excluded_numbers: 
     return r(a[:i]+m+a[i+1:]) 


print r(a),b 

이것은 스도쿠 해결사입니다. 0과 1-9 숫자를 가진 81 크기 문자열을 입력하고 0없이 문자열을 반환합니다. 주어진 예제는 문자열 a을 입력하고 결과 문자열을 반환한다고 가정합니다. 당신은 함수가 재귀 함수 r는 아무 것도 반환하지 않습니다에 의해 반환되는 결과를 인쇄하려고 할 때 exit(a) 대신 return ab.append(a)파이썬에서 재귀 및 반환 값

를 넣어 결과를 돌려 확인할 수 있습니다. 또한 b.append(a)으로 b 표를 채우는데도 불구하고 빈 표가 인쇄됩니다.

+1

AFAIK 파이썬으로 재귀 호출의 가치를 return해야합니다. – Ashalynd

+3

원하는 출력의 예는 어떻습니까? –

+0

@JonClements 나는 그가 스도쿠를 풀기 위해 노력하고 있다고 생각하고 그는 해결 된 판을 인쇄하려고한다. – thefourtheye

답변

3

당신은 매우 빠르게 스택에서 실행할 수있는 최고의 언어 재귀를 시도하지 않는 r

+0

무엇을 의미합니까? – spiros

+1

당신은'r' 자체를 호출하지만,'return'을 사용하지 않았으므로 재귀 호출의 값은 버리게됩니다. –