빌더는 재귀 적으로 (거의 이해) 여덟 여왕의 문제를 해결

어제 실패, 밤을 보았다거나하지 않았지만, 적어도 지도자.

여덟 여왕 전에 말하는 것은, 내가 먼저 간단한 재귀 발전기를 가지고 :

나 자신이 시간이 잊어 버린 것을 두려워 분석 아래 표를 생각주고,이 다중리스트 [] 바커의 제거이다.

(중첩) DEF를 평평 : 
    시도 : 
        하위 목록에 중첩을 위해 : 요소 평평하게 (하위 목록) :          #의 인쇄 (요소) 항복 요소            # 메인 출력을, 루프를 수신. 
    다음을 제외하고 형식 오류 
        반환 중첩 수익률 하위 #
            

        

 표정은 내가, 사실, 내가 많은 노력을 지출로 이동 후 이해하지 않고,하지 않도록주의 분석, 그 뒤에주의 깊은 분석을 읽을 생각, 아주 간단한 재귀 발전기 것 같다뿐만 아니라 이해

사용이 재귀, 나는 일반적으로 반환이 시간이 두 배 수율로, 몇 가지 간단한 재귀를 작성한 사실, 사람들이 함정에 빠지지있을 것 두 번 수율을 생성, 나는 또한 고통

재귀 발전기는 수율을 사용할 수있는 경우 때문에 팔 여왕 뒤에 재귀 발전기는 두 번 형식을 산출,

다음 필요가 항복 반환 값을 기억, (없음), 또는 케이스 내부 for 루프의 값을 전송하지, 사실, 다음 값의 경우, 나는 시간 분석이 훨씬 덜 우회를 취할 수있을 수 있습니다.

다음 값 테스트에 실패하면, 값리스트 안에 모든 요소 리턴 값 집합의리스트의 옆에있을 수 없으며,이 목록은 단지 첫 번째 값 안에 설정 요소들의 목록을 반환한다.

실패에 대한 구체적인 이유 옆에, 사실, 난 여전히 알아낼 수 없습니다. 당신이 어떤 제안이있을 경우, 메시지를 남겨주세요.

값리스트에서 하나의 모든 요소를 ​​하나의 수율이 원리되지 동일한 원인과주기 값이 될 수 있고, 사이클 시간의 값을리스트 할 것이다.

다음과 같은 오류 사례 :

: DEF (중첩) 평평하게 
    시도해보십시오 
        : 중첩의 하위 목록에 대한 
            요소 = 다음 (평평 (하위 목록)) 
            # 인쇄 (요소) 
            요소 산출 
            패턴 화의 요소 (하위 목록)에 대한 #을 : 
            # 인쇄 (요소) 
            # 수율 요소를 
    형식 오류 제외 : 
        수율 중첩 


A =리스트 ((평탄화 [1 - [[[[2]], 5 [3- [4] [4])) 
프린트 (a) 
B가 = 평탄화 ([2,3] ]) 
인쇄 (리스트 (b))

 이것은 고장, 출력의 경우 :

[1, 2, 4] 
[2]

 

탈곡기의 목록, I 재귀 발전기 및 예비 이해와 정의를 들면,

일반적인 두 수율은 수율이 기준 조건 자식 트리거 후에 값만큼 순환 아버지 수율 상위 수율로 복귀, 출구의 상부 층은 리턴 최 외곽 층을 알고 부모 yelid 복귀의 최 외층에 합격 데이터입니다.

따라서, 하위 수율을 발견 한 후, 기준 조건을 알아 첫째,이 재귀 발전기 보면 내가 이해할 수 있지만, 수율의 아버지는 인식이 되었으나, 나 정말 쓰기, 쓰기 수 있습니다.

 

이 재단과 8 개의 여왕 코드, 나는 아무 것도 큰 문제를 분석 하였다.

 

고통 플러스 통증, 고통에 함께 재귀 많은 나는 두통을보고 한 번, 플러스 발전기, 밤 다음 두 시간 좋은 잠을 보낸다. () 오늘 다시 최종 실패

문제의 개요 :

N × N N 체스 퀸즈 그리드에 배치가 두 퀸즈 동일한 행에 있지 않은, 즉 서로를 공격 할 수 있고, 동일한 열 또는 동일한 대각선 모든 진자 방식의 출력.

'' ' 
의 첫 번째 행의 퀸 번째 요소는, 그 상태가 [0] = 3 인 경우, 목록을 정의
간단히 행 인덱스 열의 내용 첨자 확실히 반복하지로 호출 될 수 있고,리스트 요소는 중복 될 수 없다 ( 요구)
이차원 평면 정의 X가 Y 인 Y 축, X 축에 초점 겹치지 않으면
''

규칙을 정의 다음 퀸의 위치를 만족시키기 위해 어떤 조건 :
DEF 충돌 (나라 nextX) # 상태 조상있을 수 nextX로 정의되는 상기 정의 된 x 좌표 
    nextY = LEN은 (주)가
     '' 경우 이전 중 임의의 모든 퀸즈 콘트라스트 이전과 이후 nextX 정의 퀸 조건이 만족 직접 BREAK true를 반환 '' ' 
    에 대한 I  범위 (nextY) :   #가 I 전면 퀸의 y 축의 변수 나타내는 
        ' ' 열이 동일한 지 여부를 판단하는 제 nextY가-I가 결정 여부 같은 대각선에 '' ' 
        IF - ABS (nextX 주 [내가]) 에서 (0, nextY - I) :   # nextY Y 축 퀸 매개 변수를 나타냅니다 
            반환 진정한
     반환 거짓   #의 오류가이 다음 여왕을 설명 반환 위치 표준
 

호출되는이 기능을 사용하여 후속 테스트 케이스는 다음 이미 전면에 모두가 마지막 좌표를 알고 좌표

queens_t DEF (NUM, 주) : 
    # 쿼리의 마지막 여왕되지 않습니다 : 렌 경우 (주)는 NUM-1 == 
        범위의 POS에 대한 (NUM) : #이 마지막 퀸즈하려고 각 열 값 확인 
            (그렇지 않으면 충돌 상태, POS) : 컬럼의 표준 매개 변수의 준수가 # 경우가 반환됩니다. 
                항복 POS 

인쇄 (목록 (queens_t (. 4, (. 1 ,. 3, 0))))

 코드 논리는 비교적 간단하다.

이것은 전체 코드, 주석 사실, 매우 풍부하다 전체 로직, 다시 한 번 재귀 시도 만 기본 조건이 만 데이터 레이어를 반환 활성화도 실패, 종료

count_b = 0 # 초기화 착오 중간 주파수 
시행 착오의 마지막 번호 = 0 # 초기화 단부 count_s 

DEF 즈 (NUM, 주) 
    렌 IF (주) == - NUM 1. # 쿼리 퀸 마지막 아니며, 가변 이 기준 조건에 재귀 반환되었다. 
        (NUM) 범위 내에서 POS를 위해 : #은 마지막으로 각 열 값의 황후 만들려고 노력 
            하지 않을 경우 충돌 (상태, POS) #을 : 반환되는 컬럼의 표준 매개 변수의 준수가 있다면. 
                이것이 완료되면 수율 (POS) #이이 자격을 갖춘 여왕의 사슬임을 나타내는 데이터를 반환하는 표준 데이터 포트 
            : 다른 
                회사 무료 count_s 가입 
                count_s가 + = 1 # 마지막 단계 번호를하는 이순신 진 징 시도가 실패한 
    사람을 : 
        레인지 (NUM)의 POS에 : #는 마지막 사이클 POS하지 않으면 
            되지 충돌은 (주는 POS)에 묻 으면 : #은 pos가 유효, 유효 실행하지, 포기 무효
                # 결과 = 다음 (여왕 (NUM , 주 + (POS))) # 다음 값으로도, 내가 분석을 자신이 시간, 다음 값을 찾을 수 있어야한다 실패 
                                                                이러한 실패 오류의 값이기 때문에, # 깊이를, 나는 재검사를 제외하고 시도하지 않으려 
                # 인쇄 (POS) 
                # 수율 (POS 등) + 결과 
                퀸즈 (NUM, 주 + (POS))의 결과에 대한 : 루프 # 값 계층은 데이터를 반환, N을 정의 여왕, N-1로 돌아 가기 계층 
                        # 인쇄 ((POS) + 결과) 
                        수율 (POS) 결과 + 
            그렇지 않으면 : 테스트가 바로 다음주기에 포기하지 않기 때문에 사실 #, 많은 중간 미완성 시험이있다 
                세계 count_b 번호 중간 주파수 시험 생물 종에 실패 
                count_b합니다. 1 + = 

NUM =. 8 

인쇄 (목록 (퀸즈 (NUM, ())))
# 인쇄 (LEN (목록 (여왕 (NUM, ())))) 
인쇄 (count_b) 
인쇄 (count_s)

 당시 코드의 최적화 된 버전 :

= 0 count_ss 
DEF queens_simple (NUM = 8, 상태 = ().) : 
    # 메인 루프를 시작 루프가 단지 어떤 열이 각 원소의 좌표 위치 될 수있다 : POS (NUM) 범위에 대해 
        아니라면 충돌 (상태 POS) : 들어오는 요소 # 규칙을 따라야 
            렌 경우 (상태) ==는 NUM- 1 : #의 초기 상태, 초기 상태 (마지막 요소의 출력)으로 돌아 
                수율 (POS) 
            다른 : 
                '재귀로' '참조 수는 표준, for 루프에 대한 표준 값을 제공하지, ''반환 층 '을 기본 조건으로 시험 
                : (NUM, 주 + (POS)) queens_simple에 결과에 대한 
                    수율 (POS) 결과 + 
        다른 : 
            세계를 count_ss # 1 실패 횟수가 아닌 단순화 된 버전 번호와 비교하여 일관된 정의한다. 
            + =. 1 count_ss의 

인쇄 (목록 (queens_simple ()))

 두 코드의 출력 결과는 시행 착오의 수를 포함하여, 일치한다.

다시 결론 :

개인 요약, 재귀 수식에 올바른 데이터 내보내기를 반환 기준 때문에, 먼저 좋은 기본 조건과 같은 몇 가지 조건을 더 중요

둘째, 순서대로 좋은 데이터는 하위 루프 여기, 수용의 올바른 경로로 돌아갑니다 수율이 경우 좋은 형식처럼 데이터를 병합 할 필요가 동의 (반환 값이 있어야합니다), 여전히 매우 좋은 수신

또한 일시적이 아니라 두 말을하지 yiled 무엇을, 기준 조건 데이터로의 회귀, 주요 데이터에 반환.

그것은 퍼거슨, 마지막으로 적어도 읽을 수, 그렇고 그런 카운트 얻을.

 

다음 링크를 두 사람이, 내가 이해하는 다른 사람들의보고하지 않는 설명, 내가 다른 사람의 글이 이해가 안보고했다.

https://blog.csdn.net/qq_33085753/article/details/86592361

https://blog.csdn.net/wang903039690/article/details/79706311

추천

출처www.cnblogs.com/sidianok/p/11802800.html