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 언어 한 노 타 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.