두 가지 핵심 재귀 알고리즘이 있습니다 :
1. 종료 조건 재귀 재귀 함수 반환 값과 리턴 타입 설정 기능의 유무 재귀 종료 조건을 결정
2. 분해 하위 문제를
하노이 문제의 예 1-- 타워
1 #INCLUDE <iostream> 2 사용 스페이스 성병; (3) 무효 하노이 ( INT의 N, 숯 A, 숯 B, 숯 C) { 도 4 의 경우 (N == 1 )가 COUT << " 로부터 상부 디스크 이동 " << << " 행 " << C << ENDL; (5) 그 밖의 { 6 하노이 N- ( 1 , A, C, B); 7 COUT은 << " 로부터 상부 디스크 이동 " << << "C는 << << ENDL] . 8 하노이 (N- 1. , B, A, C)] .도 9 } 10 } . 11 INT 의 main () { 12는 INT N-; // 타워 하노이 스케일 (13)가 COUT << " 입력 하노이 저울 타워 : " << ENDL; 14 그동안 ( 1 ) { 15 CIN >> N- 형; 16 IF (N- 형 < 1 ) COUT << " ! 입력을 확인하십시오 " << ENDL 단계; 17 사람의 BREAK를 ] 18 } . 19 숯 , A는 B, C, 20는 COUT은 << " 세 실린더의 이름을 입력하세요 " << ENDL; 21 CIN 사항 >> >> B >> C; 22은 하노이 (N-, A, B, C); // 해결하기위한 함수를 호출 (23) 복귀 0 , 24 }
어레이의 예 2-- 재귀 용액
. (1) #INCLUDE <iostream> 2 은 USING 스페이스 STD; 3. INT GetSum ( INT N-, INT * A) { // N-IS 소자의 수 (4). IF (N - == 1. ) 복귀 A가 [ 0 ] 5. 다른 반환 GetSum을 ( N- 1. , a) + A [N- (1). ] . 6 } . 7 INT 의 main () { 8. INT의 크기; // 문제의 크기, 배열 요소, 즉 원하는 번호 . 9 COUT << " 질문을 입력하세요 크기 : " << ENDL; 10 그동안 ( 1. ) { 11. CIN >> 크기; (12)는 IF (크기 <= 0 ) << COUT은 " 스케일의 유효성을 확인하십시오 " << ENDL; 13이다 사람의 BREAK ; 14 } 15 INT * P = 새로운 새 INT [사이즈 ]; // 동적 개방 어레이 16 COUT << " 배열 차례로 요소 입력하세요 " << ENDL] . 17 대를 ( int로 I = 0 ; I는 크기 <I가 ++ ) { 18는 CIN >> * (P +I) . (19) } (20)는 COUT을 << " 각 배열 요소에 부여 : " << ENDL는 << GetSum (크기, P) (21)는 복귀 0 ; 22이다 }
예 최대 배열 재귀 용액 3--
. (1) #INCLUDE <iostream> 2 #INCLUDE <math.h> 3. 은 USING 공간 STD는, . 4 INT getMax ( INT N-, INT * A) { // N 개의 원소이다 . 5 IF (N - == . 1 ) 반환 를 [ 0 ] . 6 사람의 복귀 맥스 (getMax (N- 1. , a)는 [N- 1이다. ]) . 7 } . 8 INT 의 main () { 9. INT의 크기; // 문제의 스케일의 수, 즉 소자 (10) COUT < < " 문제의 규모를 입력하십시오 :" << ENDL] . 11 그동안 ( 1. ) { 12는 CIN >> 크기; 13은 IF (크기 <= 0 ) << COUT은 " 스케일의 유효성 확인하세요 " << ENDL 단계; 14 사람의 BREAK를 , 15 } 16 INT * P = 새로운 새 INT [크기]; // 동적 배열을 열 17. COUT << " 차례로 배열 요소를 입력하세요 " << ENDL; 18 인 위해 ( int로 I = 0 ; I는 크기 <; I는 ++ ) { . 19 CIN >> * (P + I), (20)이다 } 21는 COUT은 << " 입력 최대치 어레이는 : " << ENDL는 << getMax (크기, P) (22)는 복귀 0 ; 23이다 }