한 노 타, 귀속 과 python 실현

한 노 타 문제
세 개의 기둥 A, B, C 중의 A 기둥 에 몇 개의 원반 이 놓 여 있 는데 그 중에서 아래 의 원반 은 위의 원반 보다 크다. 이 규칙 은 세 개의 기둥 이 모두 지 켜 야 한다. 목적 은 세 개의 기둥 을 빌려 몇 개의 원반 을 모두 A 기둥 에서 C 기둥 으로 옮 겨 그 중의 절 차 를 구 하 는 것 이다.
한 노 타 와 귀환
한 노 타 문 제 는 전형 적 인 재 귀 문제 이다.간단 한 귀속 이 해 는 하나의 방법 에서 그것 자 체 를 호출 하 는 것 이다.더 나 아가 한 문 제 를 더 간단 한 문제 로 지속 적 으로 분해 하여 문 제 를 해결 할 수 있 을 때 까지 하 는 것 이다. 물론 핵심 은 그 자체 로 해결 하 는 것 이다.
한 노 타 사상
A 기둥 의 원반 을 C 기둥 으로 옮 기 는 절 차 는 결국 세 개 에 불과 하 다.
4. 567917. A 기둥 의 마지막 을 제외 한 모든 원반 을 B 기둥 으로 옮 깁 니 다
4. 567917. A 기둥 에 남 은 원반 을 C 기둥 으로 옮 겨 라
4. 567917. 남 은 B 기둥 의 모든 원반 콩 을 C 기둥 으로 옮 깁 니 다
python 구현
count = 0  #         
def hanoi(a, b, c, num):
    """
       
    :param a: A   
    :param b: B   
    :param c: C   
    :param num:      
    :return: 
    """
    global count 
    if num == 1:  #        ,  "A"       "C"    (    )
        count += 1
        print a + "->" + c
        return
    num -= 1
    hanoi(a, c, b, num)  #    :   A                    B    。
    count += 1
    print a + "->" + c  #    :   A              C    。
    hanoi(b, a, c, num)  #    :     B             C    。


if __name__ == '__main__':
    hanoi("A", "B", "C", 3)
    print count

결과 되 돌리 기:
A->C
A->B
C->B
A->C
B->A
B->C
A->C
7


읽 어 주 셔 서 감사합니다!만약 문장 에 잘못 이 있 거나 오해 가 있 는 부분 이 있다 면, 번 거 로 우 시 겠 지만, 더 많은 가르침 을 주 셔 서 대단히 감사합니다!The End.

좋은 웹페이지 즐겨찾기