C언어 팩토리얼 재귀함수 구현 시 return 1의 의미가 뭔가요?

조회수 1856회
#define _CRT_SECURE_NO_WARNIGS
#include<stdio.h>
#include<stdlib.h>

int factorial(int n);

int main() {
    int n;
    scanf("%d", &n);
    printf("%d\n", factorial(n));
    return 0;
}

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

factorial 함수에서 return 1의 의미가 뭔지 모르겠네요. 만약 5를 입력했을 때 return 0 라고 작성 시 0이 나오고, return 1이라고 작성 시 120 (정답) 이 나오고, return -1 을 넣었을 때 -120이 나오네요. 각 return 값이 무슨 의미를 가지고 있는지 궁금합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 함수의 호출을 그림으로 그려보면서 생각해보세요. return 1 은 더 이상 factorial 을 호출하지 않고 1을 반환하는 겁니다. 그래야 재귀호출이 끝나겠지요. 정영훈 2020.1.29 04:11

1 답변

  • 팩토리얼 F_n 의 점화식이 재귀함수랑 똑같아요.

    팩토리얼을 점화식으로 다음과 같은 두 조건으로 정의할 수 있어요.

    F_n = n x F_(n-1) n! = n x (n-1)! 이니까.
    F_0 = 1 0! = 1 이니까.

    이 두조건을 함수로 만들면, 위 쪽 조건이 ( n>0) 분기에 해당하고, else 쪽이 아래쪽 분기에 해당하죠.

    재귀함수가 나올 때는 고등학교 때 배운 점화식을 떠올리세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)