재귀호출 팩토리얼 질문
222
작성한 질문수 11
#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
안녕하세요.
질문자님 코드는 무한으로 재귀함수만 호출하고 빠져나오지 못하기 때문에 문제가 발생한 것입니다. 재귀함수가 종료되지 않고 무한으로 계속 호출된다는 뜻입니다. (다른 변수 사용 못하는 그런건 없습니다)
질문자님의 코드는 매번 fact 마다 i가 새롭게 정의되고 1로 시작됩니다. 그리고 이를 i++한 후 fact(2)를 호출하고 계세요. 근데 또 재귀로 다음 fact(2)가 호출되면 n = 2 는 되겠지만 i는 새로 선언되서 또 1입니다. 1 < 2 를 만족하고 i는 1증가되서 2가 되고 fact(2)가 또 호출되고... 이게 무한 반복이 되는 상황입니다. 매 호출마다 n은 2로 고정되어 무한으로 fact(2)가 호출되는 코드에요.
재귀적으로 함수들을 호출할땐 언젠간 함수가 꼭 종료되어서 빠져나와야해요! 그래서 종료 조건을 설정해두고 종료 조건에 수렴해가도록 코드를 짜는 것이 중요합니다.
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
44
3
main 함수에서 왜 int만 선언이 되는걸까요
1
52
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
52
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
46
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
134
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
74
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
52
2
2.6 강의 따옴표 출력 규칙 문의
1
74
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
60
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
64
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2
11.5 코드 구현
1
66
2





