이것도 루프 방식이라 초보자들이 이해하기 어려울 수도 있는데... 설명해드리겠습니다
예를 들어 fun() 메서드의 매개변수는 100입니다. 2로 변경하겠습니다
이 재귀적 방법의 목적은 누적입니다. 결과는 루프 누적과 동일하지만 실행 방법이 다릅니다.
프로그램 실행 과정은 다음과 같습니다.
2를 전달하면 프로그램은 else의 내용을 실행합니다
즉, temp+fun(temp-1)을 반환합니다.
실제 수익은 2+fun(2-1);
즉, 2+fun(1)은 원래 매개변수 3을 2로 변경합니다.
시작하겠습니다. 이것은 누적 프로그램이므로 3을 꺼내서 이전에 정의한 합계에 할당하므로 현재 합계는 2입니다.
재귀적 메서드이므로 fun(int temp) 메서드를 반복해서 실행해야 합니다.
이제 매개변수가 1이 되는 것뿐입니다
다음 절차는 다음과 같습니다.
매개변수가 1이므로 if
가 들어갑니다.그러면 1이 반환됩니다;
따라서 현재 합계는 이전 합계에 현재 fun(1)이 반환한 1을 더한 값이어야 합니다
그래서.....이제 합계는 2+1=3;
이 되어야 합니다.방금 두 숫자 사이의 순환에 대한 예를 들었습니다. 다른 98개 숫자 사이의 순환도 이와 같습니다
간단히 말하면 재귀는 조건이 충족될 수 없을 때까지 자신을 계속 호출하고 그 후에는 다시 자신을 호출하지 않는 것을 의미합니다
보세요. 좀 더 명확하게 설명하고 싶지만 다른 사람에게 물어 본 적이 없습니다. 이해가 안되거나 이해가 안되면 다시 물어보세요. ...
작품이 매우 아름답습니다. 이 수준의 인터페이스를 만들 수 있다면 이 작은 문제도 어렵지 않을 것입니다.
질문은 다음과 같습니다.
1. 이 그래프의 구조를 디자인하는 가장 쉬운 방법은 배열을 사용하는 것입니다.
2. 연결된 노드를 열거하는 방법. 쉽게 말하면 왼쪽 위, 오른쪽 위, 왼쪽, 오른쪽, 왼쪽 아래, 오른쪽 아래를 판단하는 문제입니다.
3. 동일한 색상을 순차적으로 결정하는 방법은 무엇입니까? 가장 간단한 알고리즘은 플러딩 방법입니다. 위의 6개 방향부터 살펴보세요. 다음 지점을 찾은 후 6개 방향부터 살펴보세요. . .
대략적인 코드는 다음과 같습니다.
토끼수업
{
최종 정수 D_UP_LEFT = 1;
최종 정수 D_UP_RIGHT = 2;
최종 정수 D_LEFT = 3;
최종 정수 D_RIGHT = 4;
최종 정수 D_DOWN_LEFT = 5;
최종 정수 D_DOWN_RIGHT = 6;
getColor () ;
getCloseRibbit(정수 방향)
{
... // 인접한 토끼를 지정된 방향으로 가져오는 함수는 다음과 같습니다
// null을 반환하지 않으면 .
}
int getColor () {}
목록 확인색상 ()
{
ArrayList 목록 = 새 ArrayList() ;
doCheckColor(목록, 이) ;
반품 목록 ;
}
void doCheckColor(목록 목록, Rabbit r)
{
if (r.getColor () != this.getColor () || list.contains (r))
반품 ;
list.add (이것) ;
for (int i = D_UP_LEFT ; i
{
Rabbit next = r.getCloseRibbit (i) ;
if (다음 != null)
next.doCheckColor(목록, r) ;
}
}
}
결과 목록에는 원하는 같은 색상의 토끼가 있습니다.
배열을 사용한 재귀:
공개 수업 Test12 {
정적 정수 M = 4;
정적 정수 N = 3;
static int[] a= new int[]{1,2,3,4};
static int[] b = new int[N];
public static void main(String[] args){
C(M,N);
}
정적 무효 C(int m,int n){
int i,j;
for(i=n;i
b[n-1] = i-1;
만약(n>1)
C(i-1,n-1);
그밖에 {
for(j=0;j
System.out.print(a[b[j]] + " ");
System.out.println();
}
}
}
}
출력:
1 2 3
1 2 4
1 3 4
2 3 4
java는 재귀 연산 n을 구현합니다! , n을 입력하세요. 정수가 아닌 경우 다시 입력하라는 메시지가 표시됩니다...
포트 java.util.Scanner;
java.util.regex.Matcher 가져오기;
java.util.regex.Pattern 가져오기;
공개 수업 테스트 {
public int jiecheng(int num) {//재귀 계승
if (숫자 > 1)
return num * jiecheng(num - 1);
그렇지 않으면 (숫자 == 1)
반환 1;
그밖에
0을 반환합니다;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 키보드에서 입력 받기
문자열 번호 = "";
Pattern p = Pattern.compile("\d+"); // 정규 표현식, (1~N 자리) 정수 일치
Matcher m = null;
int k = 0;
동안(사실) {
System.out.print("정수를 입력하세요:");
num = sc.nextLine(); // 입력 라인 가져오기
m = p.matcher(num);
if (m.matches()) {
k = Integer.valueOf(num); // 문자열을 정수로 변환
휴식;
}그밖에
System.out.println("정수가 아닙니다. 다시 입력해 주세요!")
System.out.println();
}
System.out.println(new Test().jiecheng(k)); //팩토리얼 메서드 호출
}
}
귀한 땅에 살면서 수천년 동안 번영을 누릴 수 있기를 바랍니다. 새해 복 많이 받으세요.
위 내용은 Java 재귀 메소드 코드에 익숙하지 않음의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!