>  기사  >  컴퓨터 튜토리얼  >  자바의 재귀 알고리즘에 대한 자세한 설명을 여러분께 부탁드리고 싶습니다.

자바의 재귀 알고리즘에 대한 자세한 설명을 여러분께 부탁드리고 싶습니다.

WBOY
WBOY앞으로
2024-01-07 12:14:39426검색

Java의 재귀알고리즘에 대해 자세한 설명을 부탁드리고 싶습니다

공개 수업 테스트{

public static int getResult(int 매개변수) {

if (매개변수 == 0) { 결과 반환; } 또 다른 { 결과 *= 매개변수; return recursiveFunction(매개변수 - 1, 결과); }

반품번호;

}

public static void main(String[] args) { //여기에 코드를 작성하세요 }

int 결과 = 결과(5);

System.out.println(결과);

}

}

실행 원리는 다음과 같습니다.

result(5) 처음에는 매개변수가 1보다 작거나 같은지 확인하기 위해 함수 본문을 입력합니다. 이때 매개변수는 5이고 조건이 성립되지 않습니다. 즉, 5 * 결과(5-1)이고, 프로그램이 반복적으로 실행됩니다...

5*결과(5-1)

4*결과(4-1)

3*결과(3-1)

2 * result(2 - 1) 이 시점에서 매개변수는 1과 같고 조건을 충족합니다. 함수는 1을 반환하고 레이어별로 반환합니다. 즉:

결과(1) =1

2*결과(1)=2*1=2

3*결과(2)=3*2=6

4*결과(3)=4*6=24

5*결과(4)=5*24=120

자바의 재귀적 방법을 사용하여 n개의 숫자를 중복 없이 완전히 배열하세요. n 3

프로그램은 다음과 같으며 입력 형식은 다음과 같습니다.

5

3 1 2 1 2는 첫 번째 줄이 다음에 입력할 숫자의 개수를 나타내는 숫자라는 의미입니다. 두 번째 줄에는 정렬할 숫자를 나타내는 n개의 숫자가 있습니다. 입력에서는 정렬할 숫자가 모두 음수가 아닌 숫자라고 가정합니다.

java.io.파일 가져오기;

java.io.FileNotFoundException 가져오기;

java.util.Arrays 가져오기;

java.util.Scanner 가져오기;

공개 수업 메인 {

정적 최종 int maxn = 1000;

int n; //배열 요소 수

int[]a // 배열

boolean[] Used; // 재귀 프로세스 중에 해당 요소가 사용되었는지 여부를 표시하는 데 사용되는 보조 변수, Used[i]는 i 번째 요소가 사용되었는지 여부를 나타냅니다

int[] cur; // 현재 배열 번호를 저장합니다

// 중복 없이 전체 배열을 반복적으로 인쇄합니다. 현재 idx 위치에 인쇄 중입니다

void print_comb(int idx) {

idx == n이면 마지막 요소를 순회했으며 cur를 출력할 수 있다는 의미입니다.

for(int i = 0; i

if(i > 0) System.out.print("");

System.out.print(cur[i]);

}

System.out.println();

}

int last = -1; // 중복을 피하기 위해 마지막 변수를 사용하여 마지막 검색 값을 기록합니다

for(int i = 0; i

if(used[i]) 계속;

if(last == -1 || a[i] != last) { // 현재 숫자가 반복되지 않고 사용되지 않은 경우에만 재귀가 계속됩니다

마지막 = a[i];

cur[idx] = a[i];

//역추적 방법

used[i] = 사실;

print_comb(idx + 1);

사용됨[i] = 거짓;

}

}

}

public void go()는 FileNotFoundException을 발생시킵니다. // 메소드 본문 구현 }

{

Scanner in = new Scanner(new File("data.in")); 구문은 data.in이라는 파일에서 입력을 읽는 데 사용되는 in이라는 Scanner 개체를 만드는 것입니다.

//데이터 읽기 및 정렬

n = in.nextInt();

a = 새로운 정수[n];

for (int i = 0; i

Arrays.sort(a);

//보조변수 초기화 및 중복없는 전체 배열 시작

cur = 새로운 int[n];

used = 새로운 부울[n];

for(int i = 0; i

print_comb(0);

in.close();

}

public static void main(String[] args)에서 FileNotFoundException이 발생합니다. 이는 프로그램 항목을 시작하는 데 사용되는 Java 프로그램의 기본 메소드입니다. 이 방법에서는 파일 읽기, 데이터 처리 등과 같은 일부 작업을 수행할 수 있습니다. 그중 FileNotFoundException 발생은 실행 중에 파일을 찾을 수 없음 예외가 발생할 수 있음을 나타냅니다. 이 예외가 발생하면 프로그램은 FileNotFoundException 예외를 발생시킵니다. 이 방법에서는 파일 읽기 및 예외 처리를 처리하는 특정 코드 논리를 작성할 수 있습니다.

new Main().go();

}

} 객관적으로 말하면 비재귀적 및 비반복적 전체 순열은 상대적으로 간단하고 효율적입니다.

Java에서 재귀의 역할은 무엇인가요? 재귀를 사용하는 이유

두 질문은 사실 하나의 질문이겠죠?

재귀의 역할: 재귀 알고리즘은 재귀로 정의된 일부 문제를 해결할 수 있습니다.

먼저 재귀적 정의의 문제점이 무엇인지 이해해야 합니다. 간단히 말해서, 재귀적으로 정의된 문제는 구조는 동일하지만 크기가 더 작은 더 작은 문제를 포함하는 큰 문제입니다.

예를 들어 n 계승의 정의는 다음과 같이 이해될 수 있습니다.

n!= n*(n-1)!

위의 분석을 통해 (n-1)이 n!보다 작은 문제라는 결론을 내리는 것은 어렵지 않습니다. 이 방법에 따라 문제를 지속적으로 분해함으로써 우리는 기본적인 알려진 데이터를 얻을 수 있습니다. 그런 다음 역추출을 통해 최종 결과를 얻을 수 있습니다.

n의 계승 알고리즘은 다음과 같습니다.

private static int jieCheng(int n) { 인수 n이 계산할 값을 나타내는 팩토리얼(factorial)을 계산하는 방법입니다. 자세한 설명은 다음과 같습니다. - "private"은 메소드가 현재 클래스에서만 표시되고 다른 클래스에서는 액세스할 수 없음을 의미합니다. - "정적"은 메서드가 정적 메서드이고 개체를 인스턴스화하지 않고 클래스 이름을 통해 직접 호출할 수 있음을 의미합니다. - "int"는 메서드가 결과로 정수 값을 반환한다는 의미입니다. - "jieCheng"은 메소드의 이름이며 필요에 따라 이름을 지정할 수 있습니다.

if(n==1)

반환 1;

그밖에 {

return n*jieCheng(n-1);

}

}

또한 이진 트리의 정의도 재귀적이므로 많은 이진 트리 작업이 재귀를 통해 구현됩니다.

재귀를 사용하면 프로그램이 매우 간결해집니다.

자바의 재귀 적용! f20 1 f21 4 fn 2 2 fn 1 fnwhere

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

publicclassTest {

publicstaticintf(intn){

if(n==20){

반품1;

}elseif(n==21){

return4;

}elseif(n

returnf(n+2)-2*f(n+1);

}그밖에{

return2*f(n-1)+f(n-2);

}

}

public static void main(String[] args) {

System.out.println(f(10)); //f(10)의 값을 인쇄합니다

}

}

테스트되었습니다. 주 함수에 f(n)을 입력합니다. 여기서 n은 수동으로 조정된 매개변수이며 해당 출력 결과를 얻을 수 있습니다.

위 내용은 자바의 재귀 알고리즘에 대한 자세한 설명을 여러분께 부탁드리고 싶습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 docexcel.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제