재귀 알고리즘과 그 예

두 가지 핵심 재귀 알고리즘이 있습니다 :

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이다 }

 

추천

출처www.cnblogs.com/TYXmax/p/10988860.html