자바 신인 기초 입문 재 귀적 호출

1.귀속 개념
귀속 본질:프로그램 이 자신의 프로 그래 밍 기 교 를 호출 하 는 것 을 귀속 이 라 고 한다.
프로그램 이 자신의 프로 그래 밍 기술 을 재 귀(recursion)라 고 부 릅 니 다.재 귀 는 하나의 알고리즘 으로 프로그램 설계 언어 에서 광범 위 하 게 응용 된다.하나의 과정 이나 함 수 는 그 정의 나 설명 에서 직접적 이거 나 간접 적 으로 조정 된다.
자신의 방법 으로 이 는 보통 대형 복잡 한 문 제 를 원래 문제 와 비슷 한 규모 가 작은 문제 로 전환 시 켜 해결 하고 재 귀 전략 은 소량의 절차 만 있 으 면 문 제 를 풀 수 있다.
프로그램 에 필요 한 여러 번 의 중복 계산 은 프로그램의 코드 량 을 크게 줄 였 다.귀속 능력 은 유한 한 문장 으로 대상 의 무한 집합 을 정의 하 는 데 있다.
2.재 귀적 인 세 가지 조건:
경계 조건
전진 구간
귀환 단계
경계 조건 이 만족 하지 않 을 때,돌아 가면 서 전진한다.경계 조건 이 만족 할 때 되 돌아 갑 니 다.
다음은 두 개의 예시 프로그램 을 통 해 설명 한다.
자바 코드 를 사용 하여 5 의 단 계 를 구하 십시오.(5 의 계승=5*4*3*2*1)

package org.wxp.recursion; 
 
/** 
 *   5   (result = 5*4*3*2*1) 
 * @author Champion.Wong 
 * 
 * 
 */ 
public class Test01 { 
 public static void main(String[] args) { 
  System.out.println(f(5)); 
 } 
  
 public static int f(int n) { 
  if (1 == n) 
   return 1; 
  else 
   return n*f(n-1); 
 } 
} 

이 문제 에서 재 귀적 인 세 가지 조건 에 따라 분석한다.
(1)경계 조건:단계 곱 하기,마지막 숫자,즉 1 을 곱 할 때 1 로 돌아 가 프로그램 을 끝까지 실행 합 니 다.
(2)재 귀 전진 구간:현재 의 매개 변 수 는 1 과 같 지 않 을 때 자신 을 계속 호출 합 니 다.
(3)재 귀 반환 세그먼트:가장 큰 숫자 부터 곱 합 니 다.현재 매개 변수 가 5 이면 5*4,즉 5*(5-1),즉 n*(n-1)입 니 다.
자바 코드 로 수열 구하 기:1,1,2,3,5,8...40 위

package org.wxp.recursion; 
 
/** 
 *    :1,1,2,3,5,8...... 40    
 * @author Champion.Wong 
 * 
 */ 
public class Test_02_Fibonacci { 
 public static void main(String[] args) { 
  System.out.println(f(6)); 
 } 
  
 public static int f(int n ) { 
  if (1== n || 2 == n) 
   return 1; 
  else 
   return f(n-1) + f(n-2); 
 } 
} 

이 문제 의 돌파 구 는 세 번 째 자리 부터 이 자리 수 는 앞 두 자리 수의 합 이다.몇 번 째 자리 의 값 을 계산 하려 면 숫자 를 매개 변수 로 전달 하 는 방법 으로 계산 해 야 한다.
(1)우선,자릿수 가 1 과 2 일 때 현재 되 돌아 오 는 값 은 1 이 어야 합 니 다.
(2)그리고 자릿수 가 3 일 때 반환 값 은=2=1+1 이 어야 합 니 다.
                 자릿수 가 4 일 때 반환 값=3=2+1;
                 자릿수 가 5 일 때 반환 값=5=3+2;
                 자릿수 가 6 일 때 반환 값=8=5+3;
                 ......
(3)(2)에서 알 수 있 듯 이 3 보다 큰 경우 현재 자릿수(n)의 수치=f(n-1)+f(n-2)
3.비 재 귀 방법 실현(교체 방법)
교체 본질:변수의 원 가 를 이용 하여 변수의 새로운 값 을 추산 하고 교체 하 는 것 은 A 가 끊임없이 호출 하 는 B 이다.
관찰 과 추 도 를 통 해 문 제 를 해결 하 는 방법 을 찾 아 그 중의 규칙 을 발견 하고 이 를 프로그램 언어 로 표현 한다.
본질:문제 중의 데 이 터 를 적당 한 데이터 형식 변 수 를 사용 하여 문 제 를 해결 하 는 방법 을 프로그램 언어 에 부합 되 는 논리 로 전환시킨다.

public class Fab{
 
   public static void main( String[] args){
 
  System.out.println(f(20));
}   
 
  public static long f(int index){
 
    if(index == 1 || index == 2){
       return 1;
    }
 
    long f1 = 1L;
    long f2 = 1L;
    long f = 0;
 
    for(int i=0; i<index; i++){
       f = f1 + f2;
       f1 = f2;
       f2 = f;
    }
    return f;
  }
 
}
재 귀 는 프로그래머 가 기 계 를 괴 롭 히 는 데 편리 하고 재 귀 는 수학 공식 을 통 해 프로그램 으로 편리 하 게 전환 할 수 있다.이해 하기 쉽 고 프로 그래 밍 하기 쉽다 는 장점 이 있다.그러나 재 귀 는 스 택 체제 로 이 루어 진 것 입 니 다.한 층 깊이 들 어 갈 때마다 스 택 데이터 구역 을 차지 해 야 합 니 다.포 함 된 층수 가 깊 은 알고리즘 에 대해 재 귀 는 힘 에 부 치지 않 고 공간 적 으로 메모리 붕괴 로 끝 날 것 입 니 다.그리고 재 귀 는 대량의 함수 호출 을 가 져 왔 습 니 다.이것 도 많은 액 밖의 시간 비용 이 있 습 니 다.그래서 깊이 가 클 때 시공 성 이 좋 지 않다.메모리 공간 을 많이 차지 합 니 다)
한편,교 체 는 효율 이 높 지만 운행 시간 은 순환 횟수 가 증가 해서 만 증가 하고 추가 비용 이 없 으 며 공간 적 으로 도 증가 하지 않 지만 복잡 한 문 제 를 작성 하 는 데 어려움 을 겪 는 것 이 단점 이다.
재 귀 하지 않 을 수 있 으 면 재 귀 하지 않 아 도 되 고,재 귀 는 모두 교체 로 대체 할 수 있다.이 문 제 를 변증법 적 으로 보 려 면 깊이 가 크 지 않 아 도 재 귀 를 채택 할 수 있다.
총결산
자바 신인 기초 입문 재 귀적 호출 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 재 귀적 호출 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기