귀속 및 한 노 타 문 제 를 깊이 이해 하 다 [데이터 구조]
5781 단어 데이터 구조&알고리즘
1. 재 귀 란 무엇 인가?
재 귀 는 함수 가 직접적 이거 나 간접 적 으로 자신 을 호출 하 는 것 이다.
2. 함 수 는 어떻게 호출 을 완성 합 니까?
2.1 기조 함수 가 조 정 된 함 수 를 호출 하기 전에 세 가지 일 을 해 야 한다.
1. 기조 함 수 는 모든 실 참, 반환 주 소 를 조 정 된 함수 에 전달 합 니 다. 2. 조 정 된 함수 의 부분 변수 (형 삼 포함) 에 저장 공간 을 분배 합 니 다. 3. 조 정 된 함수 입구 로 제 어 를 옮 깁 니 다.
2.2 호출 함수 가 메 인 함수 로 되 돌아 가기 전에 세 가지 일 을 해 야 합 니 다.
1. 조 정 된 함수 의 액 반환 결 과 를 저장 합 니 다. 2. 조 정 된 함수 가 차지 하 는 공간 을 방출 합 니 다. 3. 조 정 된 함수 에 따라 저 장 된 반환 주소 에 따라 제어 권 을 메 인 함수 로 이전 합 니 다.
예 를 들 어 설명:
/**
1. main() 5,printf("hello
")
2. f() n
3.main() f()
*/
void main()
{
f(5);
printf("hello
");
}
/**
1. 7
2. n
3. , main() printf("hello
")
*/
int f(int n)
{
n=n+2;
return n;
}
3. 귀속 만족 의 2 가지 조건
1. 명확 한 종료 조건 이 있어 야 합 니 다. 2. 이 함수 가 처리 하 는 문제 규 모 는 반드시 감소 해 야 합 니 다. (재 귀 문제 가 클 수록 해결 할 수 없습니다)
4. 재 귀 와 순환 의 관계
모든 순환 은 재 귀 로 이 루어 질 수 있 지만, 반대로 모든 재 귀 는 반드시 순환 으로 이 루어 질 수 있 는 것 은 아니다.
재 귀: 이해 하기 쉽 고 속도 가 느 립 니 다 (함수 간 의 호출, 시간 소모 가 필요 합 니 다). 공간 이 넓 습 니 다 (함수 간 의 호출, 공간 을 차지 해 야 합 니 다)
순환: 이해 하기 어렵 고 속도 가 빠 르 며 공간 을 차지 하 는 것 이 적다.
2. 곱 하기 문제 와 1 - 100 의 더하기 와 문 제 를 재 귀적 으로 해결 합 니 다.
1. 재 귀적 으로 계승 문 제 를 해결한다.
n 의 계단: n *!(n - 1) n - 1 의 계단: (n - 1) *!(n - 2) n - 2 의 계단: (n - 2) *!(n - 3).
#include
#include
//
int mult(n)
{
if(n==1)
{
return 1;
}
else
{
return n*mult(n-1);
}
}
int main()
{
int val=mult(3);
printf("%d",val);
return 0;
}
2. 재 귀적 으로 1 - 100 의 더하기 와 문 제 를 해결한다.
1 - 100 의 합: 100 + (1 - 99 의 합) 1 - 99 의 합: 99 + (1 - 98 의 합) 1 - 98 의 합: 98 + (1 - 97 의 합)... 1 의 합: 1
#include
#include
//
int mult(n)
{
if(n==1)
{
return 1;
}
else
{
return n+mult(n-1);
}
}
int main()
{
int val=mult(100);
printf("%d",val);
return 0;
}
3. 한 노 타 문제
한 노 타의 전설 은 자세히 말 하지 않 겠 습 니 다. 들 어보 지 못 한 것 은 여 기 를 클릭 하 세 요: 한 노 타
재 귀적 인 사상 으로 한 노 타 문 제 를 해결한다. 1. 문 제 를 원자 절차 로 분해한다. 예 를 들 어 접시 가 2 개 밖 에 없 을 때 어떻게 해 야 하 는가. 2. 재 귀적 인 출구 를 찾는다 (접시 가 1 개 밖 에 없 을 때 C 기둥 으로 직접 이동한다)
#include
#include
// ( 2 ,3 )
void Hanoi(int n,char A,char B,char C)
{
// A 1 , A C
if(n==1)
{
printf(" %d %c %c
",n,A,C);
}
else
{
// 2 A C B
Hanoi(n-1,A,C,B);
// 1 A C
printf(" %d %c %c
",n,A,C);
// 2 B A C
Hanoi(n-1,B,A,C);
}
}
int main()
{
Hanoi(3,'A','B','C');
return 0;
}
정리
재 귀 사상 으로 문 제 를 처리 합 니 다. 1. 우선 우 리 는 문제 의 모든 단 계 를 분해 하고 원자 로 나 누 는 절차 2. 우 리 는 작 성 된 재 귀 함수 가 어떻게 실현 되 는 지 에 관심 을 가 질 필요 가 없습니다. 왜냐하면 우 리 는 원자 절차 로 분해 하고 재 귀 처리 할 때 그 자체 가 실현 되 기 때 문 입 니 다. 3. 재 귀 의 실질 은 n 규모 의 문 제 를 n - 1 규모 의 문제 로 전환 하 는 것 입 니 다. n - 1 의 문 제 는 n - 1 의 문제 로 전환 하 는 것 입 니 다.n - 2 규모 의 문 제 를 해결 할 수 있 는 규모 의 문제 로 전환한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정렬. - 통 정렬.통 정렬 (Bucket Sort) 통 정렬 은 계수 정렬 의 업그레이드 버 전 입 니 다.그것 은 함수 의 매 핑 관 계 를 이용 하 였 으 며, 효율 여부 의 관건 은 바로 이 매 핑 함수 의 확정 에 있다.통 정...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.