한 로 타 재 귀적 실현 에 대한 사고 (C 언어)
이 실현 은 재 귀적 인 강력 한 기능 의 구현 입 니 다. 쓸데없는 말 은 하지 않 겠 습 니 다. 소스 코드 를 보십시오.
#include<stdio.h>
void move(int n,int *cnt,char A,char B,char C)
{
if(n==1)
{
printf("%d :%c-->%c
",n,A,C); // , 1 C
(*cnt)++; // 1
}
else
{
move(n-1,cnt,A,C,B); // n-1 A C B
printf("%d :%c-->%c
",n ,A,C); // n-1 B A C
move(n-1,cnt,B,A,C); // n-1 B A C
(*cnt)++; // 1
}
}
int main(void)
{
int h;
int cnt = 0;
printf("
input number:
");
scanf("%d",&h);
printf("the step to moving %2d diskes:
",h);
move(h,&cnt,'A','B','C');
printf(" %d !
",cnt);
}
내 가 여기 서 제시 한 소스 코드 는 매우 간단 하지만 매우 건장 하 다!현재 분석 은 다음 과 같다.
먼저, 생각 을 정리 하고 재 귀적 으로 실현 하 는 전 제 는 문제 의 규모 가 더욱 큰 해결 은 문제 의 규모 가 더욱 작은 해결 에 의존 하 는 것 이다. 즉, n 개의 접 시 를 이동 하려 면 n - 1 개의 접 시 를 먼저 이동 해 야 한다. 이때 재 귀적 인 기초 이다.그럼 지금 기둥 이 세 개 있 는데 어떻게 움 직 여야 하나 요?비교적 좋 은 해결 방안 은 n - 1 개의 접 시 를 C 기둥 을 중심 으로 B 기둥 으로 옮 길 수 있다 는 것 이다. 그러면 A 기둥 위의 맨 아래 에 있 는 접 시 는 C 기둥 으로 자 유 롭 게 이동 한 다음 에 n - 1 개의 접 시 를 A 기둥 을 중심 으로 C 기둥 으로 이동 할 수 있다. 이것 이 바로 상기 코드 핵심 의 해결 알고리즘 이다.
이 를 보고 많은 사람들 이 의문 을 가지 고 이 해결 방안 을 이해 한 것 같 기도 하고 이해 하지 못 한 것 같 기도 하 다. 이때 어떻게 된 일 인가?사실 이것 이 바로 재 귀적 인 이해 문제 다.이 문제 에서 n 개의 접 시 는 항상 이 알고리즘 에 따라 실 행 됩 니 다. n = 1 까지 실 행 될 때 한꺼번에 돌아 가 고 겹 쳐 서 최종 결 과 를 되 돌려 줍 니 다.
이 안에 또 하나의 재 미 있 는 문제 가 있 는데, 바로 재 귀 호출 된 매개 변 수 는 변수 이다. 예 를 들 어
move(n-1,cnt,A,C,B);
이 단계 에서 그 는 C 를 B 에 게 주 었 고 B 는 C 에 게 주 었 다. 이것 은 교환 이 고 n = 1 일 때 재 귀적 으로 호출 되 지 않 기 때문에 접시 수가 홀수 일 때 두 개의 수 는 교환 되 고 짝수 일 때 교환 되 지 않 는 다. 예 를 들 어 다음 과 같다.
#include <iostream>
using namespace std;
void swap (int n,int a,int b)
{
if (n == 1)
{
cout << "a="<< a << "\tb=" << b << endl;
return;
}
else
{
swap(n-1,b,a);
}
}
int main (void)
{
int a = 1;
int b = 2;
swap(3,a,b);
}
이 예 에서 main 함수 에서 매개 변수 가 홀수 일 때 a, b 는 교환 하지 않 고 짝수 일 때 교환 합 니 다. 이것 도 숫자 를 교환 하 는 알고리즘 입 니 다!허허!
예외 적 으로 한 로 타의 재 귀 호출 개 수 는 2 의 n 차방 에서 1 을 줄 이 는 것 입 니 다. 그러므로 여러분 이 시험 할 때 너무 큰 n 값 을 입력 하지 마 세 요. DOS 에서 전체 결 과 를 보지 않도록!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 구조 학습 노트 1 - 링크 반전 (재 귀 와 비 재 귀)최근 에 데이터 구 조 를 배우 고 필 기 를 했 습 니 다. 생각 이 많 습 니 다. 다음 과 같 습 니 다. 재 귀적 사용 안 함: 재 귀적 사용: 소스 코드 는 링크 반전 - 데이터 구조 참조 박문 에서 유래 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.