C 언어 한 노 타의 간단 한 이해

한 노 타 상해
4 층 을 예 로 들다
다음은 저의 졸견 입 니 다.

한 노 타 를 c 로 옮 기 려 면 1,2,3 층 을 b 로 옮 겨 야 돼 요.4 를 c 로 옮 겨 주세요.123 을 b 로 옮 겨 야 돼 요.

근 데 한 번 에 한 조각 만 움 직 일 수 있어 요.그래서 저희 가 지금 해 야 할 일 은 위 에 세 조각 을 b 로 옮 기 는 거 예요.
그럼 1,2 를 c 로 옮 겨 야 돼 요.

이로써 우 리 는 1,2 를 c 로 이동 하려 면 1 을 b 로 이동 해 야 한 다 는 것 을 내 놓 을 수 있다
여기 서 우 리 는 반복 되 는 비슷 한 동작 이 많다 는 것 을 발견 했다.
우 리 는 귀속 체 1,귀속 체 2 출구 를 설계 할 수 있다.
재 귀 체
n-1 개의 접시 와 1 개의 접시 와 n 개의 접 시 를 옮 기 는 과정 이 비슷 합 니 다.
하지만 매번 넣 는 막대기 가 다르다.
출구
n=1 시 접시 하나만 남기 고 c 로 이동 하면 됩 니 다.
hanoi(n ,A , B , C)
N 이동 수량
A 출발지
B.빌 린 땅
C 종점
이 함 수 는 n 개의 접시 가 A 에서 출발 하여 B 를 빌려 C 로 온 다 는 뜻 입 니 다.
지금 n 층 이 있 는데 한 노 타 는 위 에 n-1 층 을 B 로 옮 겨 야 돼 요.

hanoi(n-1,A,C,B)
이 함 수 는 바로 우리 가 n-1 접 시 를 A 에서 C 를 빌려 B 로 이동 시 키 는 것 이다.

move(a,c)이제 더 이상 빌 릴 필요 없어 요.a 에서 c 로 바로 이동 할 수 있어 요.
이제 A 를 빌 리 겠 습 니 다.남 은 n-1 개의 접시 가 C 로 이동 합 니 다.
hanoi(n-1,B,A,C)완성 가능
역귀 출구
n<=1

        
```//      
//        
#include <stdio.h>
//     
int i = 1;
//n       , from     to     
void move(int n, char from, char to) {
 printf(" %d    %d  : %c----->%c
", i++, n, from, to); } void hanoi(int n, char from, char mid, char to) { if (n == 1) { move(n, from, to);// }// else { hanoi(n - 1, from, to, mid);// n-1 move(n, from, to); // hanoi(n - 1, mid, from, to);// n-1 } } int main() { printf(" :
"); int n; scanf_s("%d", &n); char x = 'A', y = 'B', z = 'C'; printf(" :
"); hanoi(n, x, y, z); return 0; }
총결산
C 언어 한 노 타 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 한 노 타 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기