Layer7

-Layer7 함수, 재귀함수

KSJ._.seven11 2023. 4. 13. 16:13

함수

 

 

우선 수학에서의 함수 정의를 봐보자.

 

함수는 입력값에 따라 출력값을 만들어 내는 ‘블랙 박스’와 같다.

 

함수란 입력값에 따라 출력값이 달라지는 식이라 볼 수 있다.

 필자가 받아들이기에는 "여러 식이 합쳐져 하나의 식으로 이루어진 공식" 이런 느낌으로 받아들였다.

 

함수를 생성한다는 것은 곧 공식을 만드는 것과 같다. 자신이 필요한 부분을 함수로 만들면 코드를 작성하는데 있어서 높은 유연성을 갖출 수 있게 될 것이다.

 

대표적인 C언어 함수 예제로는 아래와 같다.

 

 * int add(int a, int b); 

-> 두 개의 int형 매개변수를 받아들이고, int형 결과를 반환하는 함수

 

* void print_hello();

-> 매개변수를 받지 않고, 반환값이 없는 함수

 

* double calculate_average(double *numbers, int count);

-> double형 포인터와 int형 매개변수를 받아들이고, double형 결과를 반환하는 함수

 

* int factorial(int n);

->하나의 int형 매개변수를 받아들이고, int형 결과를 반환하는 함수 

 

  재귀함수

 

우선 재귀함수에 관한 예제는 아래와 같다.

 

int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n-1);
    }
}

 재귀함수에 정의는 아래와 같다.

 

재귀함수란 함수가 자기 자신을 호출하는 함수를 말한다. 즉, 함수가 실행되는 도중에 자기 자신을

 

재귀함수(Recursive function)란 함수가 자기 자신을 호출하는 함수를 말합니다. 즉, 함수가 실행되는 도중에 자기 자신을 호출하여 동일한 코드를 반복적으로 수행하는 함수입니다.

 재귀함수를 사용하면 각각의 부분 문제를 해결하는 데 같은 알고리즘을 반복해 적용함으로써 전체 문제를 해결하는 방법이 가능해진다.

 

 

*재귀함수의 장점

 *일반적으로 반복문을 사용하는 것보다 코드의 가독성을 높일 수 있으며, 일부 경우에는 코드를 더 간결하게 작성할 수 있습니다. 하지만, 재귀함수는 일반적으로 반복문을 사용하는 것보다 코드의 가독성을 높일 수 있고 때로는 코드를 더 간결하게 작성할 수도 있다.

 하지만 호출 스택 (call stack)을 사용하기 때문에 메모리 사용량이 많아지는 단점을 가진다.

 따라서 재귀함수를 사용할 경우 재귀 호출 횟수가 많지 않도록 주의해야 한다.