반응형

재귀함수란?

영어로 Recursive Function이며, 뜻 Recursive : 반복되는, 되풀이되는 이다.

즉, 자기자신을 호출하여 계속 불러오는 함수.

 

그러나 말이 너무 어렵다.

 

함수는 반환이 되어야 비로소 끝이 난다. 그러나 첫번째 함수는 Recursive( )를 만나면 첫번째 함수는 끝나지 않고 계속 자신을 메모리 다른곳에 복사 시켜 또 실행이 된다. 이것은 반복적으로 실행되며, 최종적으로 함수가 마지막에 리턴이 되어야 종료가 된다.

(리턴 조건이 없으면 모든 자원을 다 가져가서 컴퓨터가 맛이 갈것이다)

즉 이러한 호출이 가능한 이유는 바로 메모리에 "복사본을 만들기 때문" 이다.

 

 

* 아래 리턴조건이 들어가 있는 재귀함수의 예시

#include <stdio.h>

// Recursive라는 함수를 만듦
void Recursive(int num)
{
    if (num <= 0)
        return;
    printf("Recursive func num %d\n", num);
    Recursive(num - 1);    // Recursive()함수를 실행 (자신을 다시 실행)
}

int main(void)
{
    Recursive(5);
    return 0;
}

(과정)

아래와 같이 Main함수가 진행하다가 Recursive를 만나서 5값이 입력되면,

Recursive 내 5-1 연산이 반복적으로 4-1 , 3-1, 2-1, ... 1-1 = 0 이 되어 Return 조건에 만족하면

클릭하면 확대

이제 num값으로 0이 계속 입력 되므로 if 조건에 만족한다. 그래서 계속 함수를 빠져나오는 return문을 반복함으로써 처음 시작했던 main이 있던 자리로 가서 main함수를 끝낸다.

클릭하면 확대

 

 

(결과)

반응형

 

 

 

재귀함수의 활용, 펙토리얼 계산 (Factorial calculation)

https://ansan-survivor.tistory.com/1235

 

[C언어] C언어 재귀함수의 활용, 사용 용도, 예제 (재귀함수 팩토리얼 Factorial 계산, n!)

앞서 재귀함수에 대한 예시를 설명했다. https://ansan-survivor.tistory.com/1234 [C언어] 재귀함수란? 재귀함수 예시, 쉬운 설명 재귀함수란? 영어로 Recursive Function이며, 뜻 Recursive : 반복되는, 되풀이..

ansan-survivor.tistory.com

 

 

 

반응형

+ Recent posts