무한 루프가 발생하지 않습니다 재귀 함수를 보장하기 위해, 다음과 같은 특성을가집니다 :
- 간단한
基本案例(basic case)
(또는 일부의 경우는) - 프로그램을 종료에 대한 답변을 생성하기 위해 재귀를 사용할 수 없습니다. - 또한 언급 일련의 규칙은,
递推关系(recurrence relation)
다른 모든 경우에 기본 케이스로 분할 할 수 있습니다.
1, 역순으로 인쇄 문자열
/ ** 输入[ "H", "E", "L", "L", "O"] 输出[ "O", "L", "L", "E", "H"] * / 공용 클래스 PrintReverseDemo { 공공 정적 무효 메인 (문자열 []에 args) { printReverse ( "애플".toCharArray ()); } 개인 정적 무효 printReverse (CHAR [] STR) { 헬퍼 (0, STR); } 개인 정적 무효 도우미 (INT 지수 숯불 [] STR) { 경우 (NULL == STR || 인덱스> = str.length) { 리턴; } 헬퍼 (인덱스 + 1, STR); System.out.print (STR [인덱스]); } }
리스트에서 2 개의 노드들 사이의 전환
/ ** *给定1-> 2->应该返回你2-> 3- 4> 1-> 3-> 3. * / 공용 클래스 SwapNodeDemo { 공공 정적 무효 메인 (문자열 []에 args) { ListNode 헤드 makeListNode = (); 에서 System.out.println (헤드); 에서 System.out.println (swapPairs2 (헤드)); } / ** *递归 * @param 헤드 * @return * / 공용 static ListNode의 swapPairs (ListNode 헤드) { 경우 (헤드 == 널 || head.next == NULL) { 창 헤드; } ListNode p = head.next; head.next = swapPairs (head.next.next); p.next = 헤드; 페이지를 반환; } / ** *非递归 * @param 헤드 * @return * / 공용 static ListNode swapPairs2 (ListNode 헤드) { ListNode 더미 새로운 ListNode = (-1); dummy.next = 헤드; ListNode CURR = 거짓; 반면 (curr.next = NULL && curr.next.next = NULL!) { ListNode 제 = curr.next 단계; ListNode 초 = curr.next.next; // 스왑 두 개의 노드 first.next = second.next; second.next = 제; curr.next = 초; // 다음 반복으로 업데이트 CURR = curr.next.next; } dummy.next 반환; } 공공 정적 ListNode makeListNode () { ListNode 하나 = 새로운 ListNode (1); ListNode 개의 새로운 ListNode = (2); ListNode 세 = 새로운 ListNode (3); ListNode 네 = 새로운 ListNode (4); one.next = 두; two.next = 세; three.next = 네; 하나를 반환; }
3, 파스칼의 삼각형
음수가 아닌 정수 감안할 때 numRows의, 의 파스칼의 삼각형 전에 생성 numRows의의 라인을. 파스칼의 삼각형에서 각 번호는 왼쪽 상단과 오른쪽 상단과의 수입니다.
공개 목록 <일람> 생성 (INT numRows의) { 일람 <일람> 결과 = 새로운 ArrayList를 <> (); (numRows의 <= 0) {경우 반환 결과; } 에 대해 INT (I = 1; I <= numRows의, 난 ++) { 목록 innerList = 새로운 ArrayList를 <> (); 대 (INT의 J = 1; J <= I, J ++) { innerList.add (F (I, J)); } result.add (innerList); } 반환 결과; } 공개 INT의 F (정수 나 정수 J) { (j의 == 1 || I == J) {경우 1을 리턴; 사용한다} else { 복귀 F (I-1, J-1) + F (I-1, J); } }