작성
·
154
0
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<ctype.h>
#include<stdbool.h>
#include<stdlib.h>
int fact(int n)//n: parameter
{
int i=1;
int fa = 1;
if (i < n)
{
i++;
fa *= i;
fact(i);
}
return fa;
}
int main()
{
int num = 5;
printf("%d\n", fact(num));
return 0;
}
이렇게 코드를 짜보았는데 재귀함수를 사용할 때 원래변수 n이 아닌 i같은 다른변수를 사용하면 오류가 뜨나요? 컴파일 자체가 안됩니 다 ㅠㅠ
답변 2
0
0
안녕하세요.
질문자님 코드는 무한으로 재귀함수만 호출하고 빠져나오지 못하기 때문에 문제가 발생한 것입니다. 재귀함수가 종료되지 않고 무한으로 계속 호출된다는 뜻입니다. (다른 변수 사용 못하는 그런건 없습니다)
질문자님의 코드는 매번 fact 마다 i가 새롭게 정의되고 1로 시작됩니다. 그리고 이를 i++한 후 fact(2)를 호출하고 계세요. 근데 또 재귀로 다음 fact(2)가 호출되면 n = 2 는 되겠지만 i는 새로 선언되서 또 1입니다. 1 < 2 를 만족하고 i는 1증가되서 2가 되고 fact(2)가 또 호출되고... 이게 무한 반복이 되는 상황입니다. 매 호출마다 n은 2로 고정되어 무한으로 fact(2)가 호출되는 코드에요.
재귀적으로 함수들을 호출할땐 언젠간 함수가 꼭 종료되어서 빠져나와야해요! 그래서 종료 조건을 설정해두고 종료 조건에 수렴해가도록 코드를 짜는 것이 중요합니다.