data lab

백준 10872번 C언어 - 재귀함수-

LAB 관리자 2023. 8. 11. 15:33
반응형

팩토리얼

수를 하나 입력 받아서 그 수의 팩토리얼을 계산하고, 출력하는 문제입니다.

#include<stdio.h>

int fac(int num) {
	if (num == 0) {
		return 1;
	}
	else {
		return num * fac(num - 1);
	}
}
int main() {
	int num;
	scanf("%d", &num);
	printf("%d", fac(num));
}

별거 아니지만 직관적으로 보자마자 이해되지 않고 괜히 신기했기 때문에 잊지 않으려고 써봅니다.

팩토리얼을 계산하는 함수와 그 함수를 실행하는 메인함수로 구성되어 있습니다.

 

처음에, fac(num-1)을 곱하는게 무슨의미가 있지? 리턴값이 마지막 1밖에 없는데? 라는 생각이 들었지만 함수를 찬찬히 뜯어보자.

 

num 에 5를 넣으면, num이 5가 아니니 5*fac(5-1) 즉 5*fac(4)가된다.

fac(4)==4*fac(3)

fac(3)==3*fac(2)

fac(2)=2*1 이므로,

5*4*3*2*1이 되어서 5!이 맞다.

반응형