c·c++/c 프로그래밍

하노이탑 이해하기

바로이순간 2012. 3. 24. 13:59


void hanoi(int n, char from, char tmp, char to) {
  if(n==1)

    printf("move disk #1 from %c to %c.\n", from, to); // [1]
  else{ // ****
    hanoi(n-1,from,to,tmp); [ㄱ]
    printf("move disk #%d from %c to %c to.\n",n,from,to); // [2]
    hanoi(n-1,tmp,from,to); [ㄴ]

  }
}


hanoi(3, 'A','B','C'); 을 호출합니다.

hanoi(3, from, tmp, to) 가 시작됩니다. n은 3, from 은 'A', tmp는 'B', to는 'C' 입니다.

......n 이 3입니다. else // **** 이하를 실행합니다.

...... hanoi'(2, 'A', 'C', 'B'); 를 호출합니다.[ㄱ]

...... hanoi'(2, from, tmp, to) 시작, n' 은 2 , from'은 'A', tmp' 는 'C', to' 는 'B' 입니다.

............. n이 2입니다. // ***** 이하

..............hanoi"(1,'A', 'B', 'C'); 호출 [ㄱ]

..............hanoi"(1, from, tmp, to) 시작, n" 은 1, from" 는 ' A', tmp" 는 'B', to" 는 'C' 입니다.

....................n이 1입니다. [1]을 실행합니다. 1을 A에서 C로 옮긴다고 출력합니다. 끝이납니다.

..............[ㄱ] 이 끝났습니다. 그다음 줄인 [2]를 실행합니다.

..............[2] 2를 A 에서 B로 옮긴다고 출력합니다.

..............hanoi"(1,'C', 'A', 'B'); 호출 [ㄴ]

..............hanoi"(1, from, tmp, to) 시작, n" 은 1, from" 는 ' C', tmp" 는 'A', to" 는 'B' 입니다.

....................n이 1입니다. [1]을 실행합니다. 1을 C에서 B로 옮긴다고 출력합니다. 끝이납니다.

..............[ㄴ] 이 끝났습니다. hanoi'(2,...)[ㄱ]이 끝났습니다. [2]를 실행합니다

...... [2] 3을 A에서 C로 옮긴다고 출력합니다.

...... hanoi'(2, 'B', 'A', 'C'); 호출 [ㄴ]

...... hanoi'(2, from, tmp, to) 시작, n' 은 2 , from'은 'B', tmp' 는 'A', to' 는 'C' 입니다.

............. n이 2입니다. // ***** 이하

..............hanoi"(1,'B', 'C', 'A'); 호출 [ㄱ]

..............hanoi"(1, from, tmp, to) 시작, n" 은 1, from" 는 'B', tmp" 는 'C', to" 는 'A' 입니다.

....................n이 1입니다. [1]을 실행합니다. 1을 B에서 A로 옮긴다고 출력합니다. 끝이납니다.

..............[ㄱ] 이 끝났습니다. 그다음 줄인 [2]를 실행합니다.

..............[2] 2를 B 에서 C로 옮긴다고 출력합니다.

..............hanoi"(1,'A', 'B', 'C'); 호출 [ㄴ]

..............hanoi"(1, from, tmp, to) 시작, n" 은 1, from" 는 'A', tmp" 는 'B', to" 는 'C' 입니다.

....................n이 1입니다. [1]을 실행합니다. 1을 A에서 C로 옮긴다고 출력합니다. 끝이납니다.

..............[ㄴ] 이 끝났습니다. hanoi'(2,...)[ㄴ]이 끝났습니다.

모두 끝났습니다.

'c·c++ > c 프로그래밍' 카테고리의 다른 글

네이버 질문 중에서   (0) 2012.03.26
행렬의 덧셈, 뺄셈, 곱셈 - 동적할당  (0) 2012.03.25
동적할당 행렬의 곱셈  (0) 2012.03.24
10000팩토리얼 구하기  (0) 2012.03.23
bit field로 2진수 출력하기  (0) 2012.03.22