factorial의 예외사항을 고려한 재귀와 반복문 접근 구현

리로린·2024년 8월 27일
0

c 언어

목록 보기
6/10

팩토리얼 함수 구현: 재귀와 반복문

팩토리얼(Factorial)은 주어진 정수 ( n )에 대해 ( n! )을 계산하는 함수로, 기본적으로 ( n )이 0이나 양의 정수일 때 정의된다. 여기서는 재귀(Recursive)와 반복문(Iterative) 두 가지 방법을 통해 팩토리얼을 구현하는 방법을 소개한다.

1. 재귀적 구현 (Recursive Implementation)

재귀를 이용한 팩토리얼 계산은 함수가 자기 자신을 호출하여 문제를 점진적으로 해결하는 방식이다. 다음은 재귀적으로 팩토리얼을 구현한 함수이다.

int ft_recursive_factorial(int nb)
{
    if (nb < 0)
        return (0);
    else if (nb == 1 || nb == 0)
        return (1);
    else
        return (nb * ft_recursive_factorial(nb - 1));
}
  • 설명:

    • 함수는 입력값 ( nb )가 음수일 경우 0을 반환한다. 이는 팩토리얼이 정의되지 않는 경우를 처리하기 위함이다.
    • ( nb )가 0 또는 1일 경우, 팩토리얼은 1로 정의된다.
    • 그 외의 경우, 함수는 ( nb )와 ( nb-1 )의 팩토리얼 곱을 반환하며, 이를 통해 재귀적으로 계산을 진행한다.
  • 출력 예시:

    • 입력값으로 -5에서 39까지의 값을 사용하여 팩토리얼을 계산할 수 있으며, 음수에 대해서는 0이 출력된다.

2. 반복문을 이용한 구현 (Iterative Implementation)

반복문을 이용한 팩토리얼 계산은 주어진 숫자까지의 곱을 반복적으로 계산하는 방식이다. 다음은 반복문을 사용하여 팩토리얼을 구현한 함수이다.

int ft_iterative_factorial(int nb)
{
    long long num;
    int factorial;

    num = nb;
    factorial = 1;
    if (num < 0)
        return (0);
    while (nb != 0)
    {
        factorial = factorial * nb;
        nb--;
    }
    return (factorial);
}
  • 설명:

    • 입력값 ( nb )가 음수일 경우 0을 반환하여 팩토리얼이 정의되지 않는 경우를 처리한다.
    • 변수를 사용하여 ( nb )가 0이 될 때까지 반복문을 실행하며, 현재 값을 곱하여 누적한다.
    • 반복문이 종료되면 최종 결과를 반환한다.
  • 출력 예시:

    • 입력값으로 -5에서 39까지의 값을 사용하여 팩토리얼을 계산할 수 있으며, 음수에 대해서는 0이 출력된다.

결론

재귀와 반복문 모두 팩토리얼을 계산하는 유효한 방법이다. 재귀적 접근은 코드가 직관적이지만, 깊은 재귀 호출은 스택 메모리를 과도하게 사용할 수 있다. 반복문은 메모리 사용이 효율적이며, 반복 횟수에 따라 성능 차이가 있을 수 있다. 각 방법의 장단점을 이해하고 상황에 맞게 적절한 방법을 선택하는 것이 중요하다.

profile
리로린의 블로그

0개의 댓글