자바 신인 기초 입문 재 귀적 호출
귀속 본질:프로그램 이 자신의 프로 그래 밍 기 교 를 호출 하 는 것 을 귀속 이 라 고 한다.
프로그램 이 자신의 프로 그래 밍 기술 을 재 귀(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;
}
}
재 귀 는 프로그래머 가 기 계 를 괴 롭 히 는 데 편리 하고 재 귀 는 수학 공식 을 통 해 프로그램 으로 편리 하 게 전환 할 수 있다.이해 하기 쉽 고 프로 그래 밍 하기 쉽다 는 장점 이 있다.그러나 재 귀 는 스 택 체제 로 이 루어 진 것 입 니 다.한 층 깊이 들 어 갈 때마다 스 택 데이터 구역 을 차지 해 야 합 니 다.포 함 된 층수 가 깊 은 알고리즘 에 대해 재 귀 는 힘 에 부 치지 않 고 공간 적 으로 메모리 붕괴 로 끝 날 것 입 니 다.그리고 재 귀 는 대량의 함수 호출 을 가 져 왔 습 니 다.이것 도 많은 액 밖의 시간 비용 이 있 습 니 다.그래서 깊이 가 클 때 시공 성 이 좋 지 않다.메모리 공간 을 많이 차지 합 니 다)한편,교 체 는 효율 이 높 지만 운행 시간 은 순환 횟수 가 증가 해서 만 증가 하고 추가 비용 이 없 으 며 공간 적 으로 도 증가 하지 않 지만 복잡 한 문 제 를 작성 하 는 데 어려움 을 겪 는 것 이 단점 이다.
재 귀 하지 않 을 수 있 으 면 재 귀 하지 않 아 도 되 고,재 귀 는 모두 교체 로 대체 할 수 있다.이 문 제 를 변증법 적 으로 보 려 면 깊이 가 크 지 않 아 도 재 귀 를 채택 할 수 있다.
총결산
자바 신인 기초 입문 재 귀적 호출 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 재 귀적 호출 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.