• English

c 언어 재귀 함수 예제

반복 적 프로그래밍보다 재귀 프로그래밍의 장점은 무엇입니까? 재귀는 코드를 작성하는 깔끔하고 간단한 방법을 제공합니다. 일부 문제는 본질적으로 나무 통과, 하노이 타워 등과 같은 재귀적입니다. 이러한 문제의 경우 재귀 코드를 작성하는 것이 좋습니다. 스택 데이터 구조의 도움으로 이러한 코드를 반복적으로 작성할 수도 있습니다. 예를 들어 하노이의 반복 타워인 재귀 없이 무수한 나무 순회를 참조하십시오. 팩트(10)가 호출되면 팩트(9), 팩트(8), 팩트(7) 등을 호출하지만 숫자는 100에 도달하지 않습니다. 따라서 기본 케이스에 도달하지 못했습니다. 스택에서 이러한 함수에 의해 메모리가 소진되면 스택 오버플로 오류가 발생합니다. 재귀란 무엇입니까? 함수가 직접 또는 간접적으로 자신을 호출하는 프로세스를 재귀라고 하며 해당 함수를 재귀 함수라고 합니다. 재귀 알고리즘을 사용하면 특정 문제를 매우 쉽게 해결할 수 있습니다. 이러한 문제의 예로는 하노이 타워(TOH), 주문/주문/주문 후 트리 순회, 그래프 DFS 등이 있습니다.

C에서 함수는 자체를 호출할 수 있습니다. 이 프로세스를 재귀라고 합니다. 먼저 main()은 실제 인수가 1인 rec() 함수를 호출합니다. 결과적으로 rec() 함수의 형식 인수는 1의 값으로 초기화됩니다. 줄 14에서 printf() 문이 실행되고 n값을 인쇄합니다. 숫자는 1로 만 나눌 수 있다면 소수라고합니다. 두 정수의 GCD는 두 정수를 0으로 나누고 두 정수의 LCM을 나누는 가장 큰 양수 정수이며 두 정수의 배수인 가장 작은 양수 정수입니다. 요인은 숫자 아래에 있는 모든 숫자에 숫자를 곱하는 함수입니다.

숫자를 그 자체로 곱하면 숫자의 힘이 부여됩니다. 두 개 이상의 숫자의 H.C.F.는 각각을 정확히 나누는 가장 큰 숫자입니다. 이 섹션의 C 프로그램은 숫자가 소수인지 아닌지를 결정하고 지정된 숫자의 계수, LCM, HCF, GCD 및 전원을 계산합니다. 재귀로 특정 문제를 해결하는 방법은 무엇입니까? 아이디어는 하나 이상의 작은 문제의 관점에서 문제를 나타내고 재귀를 중지하나 이상의 기본 조건을 추가하는 것입니다. 예를 들어,(n-1)의 계수를 알고 있는 경우 계수 n을 계산합니다. 요인에 대한 기본 케이스는 n = 0입니다. n = 0일 때 1을 반환합니다. 스택 오버플로 오류가 재귀에서 발생하는 이유는 무엇입니까? 기본 케이스에 도달하지 않거나 정의되지 않으면 스택 오버플로 문제가 발생할 수 있습니다.

우리가 이것을 이해하기 위해 예를 들어 봅시다. C 프로그래밍 언어는 재귀, 즉 자체를 호출하는 함수를 지원합니다. 그러나 재귀를 사용하는 동안 프로그래머는 함수에서 종료 조건을 정의하기 위해주의해야합니다. 이제 컨트롤은 다시 2의 공식적인 인수와 레벨 2 rec() 함수로 전달됩니다. 줄 14의 printf() 문이 다시 실행되고 인쇄됩니다. 위의 예제에서는 n < = 1에 대한 기본 사례가 정의되고 더 큰 숫자 값은 기본 케이스에 도달할 때까지 더 작은 값으로 변환하여 해결할 수 있습니다. 간단한 함수를 통해 재귀가 어떻게 작동하는지 예를 들어 보겠습니다. 권선 3단계에서 rec() 함수가 끝나자마자 컨트롤은 호출자(예: 수준 2 호출)로 다시 전달되고 실행이 거기에서 다시 시작됩니다. 그런 다음 레벨 2 rec() 함수가 종료되어 컨트롤을 레벨 1 rec() 함수로 전달합니다. 종종 재귀루프를 사용할 수 있는 곳에서 사용할 수 있습니다. 일반적으로 재귀 솔루션은 루프 솔루션보다 우아하지만 효율성이 낮습니다.

그렇다면 왜 재귀는 전혀 사용하지 않습니까? 일부 알고리즘은 quicksort와 같은 재귀를 사용하여 보다 명확하고 쉽게 구현할 수 있기 때문입니다. 그런 다음 레벨 1 rec()이 끝나고 컨트롤이 main() 함수로 다시 전달됩니다. 재귀의 기본 조건은 무엇입니까? 재귀 프로그램에서는 기본 케이스에 대한 솔루션이 제공되며 더 큰 문제의 해결은 작은 문제의 관점에서 표현됩니다.