본문 바로가기
[백준]

[BaekJoon/백준] 10872번

by Hevton 2020. 9. 23.
반응형

팩토리얼을 재귀함수로 구현하는 문제였다.

처음에 구현하고 나서 자꾸 시간초과가 떠서 뭐지 싶었다.

 

정답아님 (시간초과 뜬 코드)

#include <stdio.h>
int facto(int m) {
    if(m==1)
        return 1;
    else
        return m*facto(m-1);
}
int main() {
    int N;
    scanf("%d", &N);
    printf("%d", facto(N));
}

뭘까 싶었는데, 입력값이 0부터였다. 그래서 0에 대해서도 처리해줘야 했는데 내가 처리를 안해버렸으므로 포문이 끝나지 않는것.....

그래서 입력이 0일 때에도 다뤄야 한다는 점은 알겠는데, 0팩토리얼이 몇인지 모르겠어서 네이버 검색해봤다.

 

몰랐는데, 0팩토리얼은 1이랜다. 

0! =1 이라는거임... 왠진모르겠음. 무슨 감마함수 어쩌구..나와있는데 수포자인 나는 알 수 없는 영역.

 

간단한 설명으로는

a! = a*(a-1)! 이므로

1! = 1*(0!) 인데, 1팩토리얼은 1이 되야 하므로 0!은 1이라는 것..

 

그냥 외울래. 여튼 덕분에 코드에 적용하기는 간단했음. m==1이 아니라 m<=1로 바꿔줬음

 

정답

#include <stdio.h>
int facto(int m) {
    if(m<=1)
        return 1;
    else
        return m*facto(m-1);
}
int main() {
    int N;
    scanf("%d", &N);
    printf("%d", facto(N));
}

 

반응형

'[백준]' 카테고리의 다른 글

[BaekJoon/백준] 2447번  (0) 2020.09.26
[BaekJoon/백준] 10870번  (0) 2020.09.23
[BaekJoon/백준] 3053번  (0) 2020.09.22
[BaekJoon/백준] 3009번  (0) 2020.09.22
[BaekJoon/백준] 1085번  (0) 2020.09.21