재귀함수 예제 자바

재귀는 Java에서 사용할 수 있는 기본 프로그래밍 기술로, 메서드가 자체 호출하여 문제를 해결합니다. 이 기술을 사용하는 메서드는 재귀적입니다. 많은 프로그래밍 문제는 재귀로만 해결할 수 있으며 다른 기술로 해결할 수 있는 몇 가지 문제는 재귀로 더 잘 해결됩니다. 이전 연습의 함수가 0에서 100 사이의 모든 정수 a와 b 쌍에 대해 종료합니까? 정수 a와 b가 0에서 100 사이인 경우 미스터리(a, b)가 반환되는 것에 대해 높은 수준의 설명을 제공합니다. 이 개념을 Java 코드로 변환하려면 재귀 메서드에 두 개의 매개 변수가 필요합니다. 더 명백한 매개 변수는 그 anagrams 표시 하는 단어, 하지만 우리는 또한 우리가 그 anagrams의 각 전에 인쇄 하려는 문자 필요. 재귀의 최상위 수준에서 각 아나그램 앞에 문자를 인쇄하지 않고 동쪽의 모든 아나그램을 인쇄할 수 있습니다. 그러나 다음 수준에서는 하나의 재귀 호출이 ast의 모든 anagrams를 표시하고 문자 e로 각각을 접두어 두는 것입니다. 그리고 그 아래의 다음 수준에서, 하나의 재귀 호출은 문자 eA와 각 접두사, st의 모든 anagrams를 표시하는 것입니다. 이 함수는 1부터 시작하여 9번째 위치에서 피보나치 번호를 제공합니다. 재귀 호출이 함수가 실행되는 마지막 일 때 재귀 함수를 꼬리 재귀라고 합니다. 그렇지 않으면 헤드 재귀라고 합니다. 이 자습서에서는 Java에서 재귀 개념을 소개하고 몇 가지 간단한 예제를 보여 주어 설명했습니다.

이 함수를 테스트하여 피보나치 시리즈를 n = 10까지 인쇄해 보겠습니다. 팩트(10)가 호출되면 팩트(9), 팩트(8), 팩트(7) 등을 호출하지만 숫자는 100에 도달하지 않습니다. 따라서 기본 케이스에 도달하지 못했습니다. 스택에서 이러한 함수에 의해 메모리가 소진되면 스택 오버플로 오류가 발생합니다. sum() 함수 위의 구현은 머리 재귀의 예이며 꼬리 재귀로 변경할 수 있습니다: 재귀 함수의 특성을 설명하고 Java의 다양한 문제를 해결하기 위해 재귀 사용 방법을 보여 드리겠습니다. 이 예제에서는 isEven(3)과 같은 함수 호출이 isOdd(2)와 동일하며, 이는 isEven(1)과 동일하며, 이는 isOdd(0)와 마지막으로 동일합니다. 이것은 다른 모든 인수가 함수에 전달될 때 발생하며 0으로 줄어듭니다. Java의 재귀와 관련된 질문을 알려주세요. 피보나치 계산은 재귀의 고전적인 예이지만, 그것은 주요 단점이있다 : 그것은 매력적인 예가 아니다.

이에 대한 두 가지 이유가 있습니다. 첫째, 피보나치 숫자를 얼마나 자주 계산할 것으로 예상하십니까? (피보나치 시퀀스는 소나무 콘과 해바라기의 나선형 수와 같은 놀라운 상황에서 도래하지만, 이러한 경우에도 큰 피보나치 숫자를 계산할 필요가 거의 없습니다.) 둘째, 위의 재귀 방법은 어쨌든 그것을하기위한 좋은 기술이 아닙니다. 사실, 당신은 수행 추가의 수에 의해 속도를 측정하는 경우, 위의 재귀 기술은 fib (n)을 취할 것이다 – 1 추가; 이를 보려면 위의 재귀 트리를 가져 와서 전체 반환 값이 꼬리 재귀가 사용되는 방법을 보려면 이 예제를 참조하십시오. 직접 재귀와 간접 재귀의 차이점은 무엇입니까? 함수 재미는 동일한 함수 재미를 호출하는 경우 직접 재귀라고합니다.