재귀함수에 관하여
꽃은별
int main(void)
{
int val;
int result;printf(정수 입력: );
scanf_s(%d, &val);
if (val 0)
{
printf(0이상을 입력해야 합니다. \n);
return;
}
result = s(val);
printf(%d!의 계산 결과 : %d \n, val, result);
return 0;
}int s(int n)
{
if (n == 0)
return 1; === 이부분
else
return n*s(n - 1);
}
이게 코드 소스인데 ...
여기서 궁금한점은
저기 == 요렇게 표시되어있는 return 1;
이부분 입니다.
재귀함수라는게 다시 한번더 자기 자신을 호출한다! 라는 말인것은 이해 했습니다.
그런데. return 1을 해주는 이유는 뭐죠?
그냥 return; 을 해주면 되는데 왜 1이 들어가죠?
그래서 제가 저 부분을 100으로 바꿔보니 (키보드에서 3을 입력받았다고 가정했을때)
600 이 나옵니다.
즉, 3팩토리얼 X 100을 한 것이죠.. 이거 왜 X100이 되는지 이해가 가지 않습니다.;
-
남은
s(n-1) 에서 n-1이 0이된다고 생각해보시면 return 만 하실경우 반환값없이 함수만 종료합니다
그럼 종료하고 이제 위로 올라가는데
return n*아무값도 반환하지 않음
여기서 n 과 곱하기 연산을 진행할 대상이 없으니 결과는 n 이됩니다
그럼 아무값도 반환하지 않는거랑 1을 반환하는거랑 결과는 같지만 팩토리얼 프로그램이라면서요?
그럼 1을 곱해야죠 -
사랑은아픔
return ;만 해도 결과는 똑같습니다..
왜 굳이 1을 넣냐는 거죠.. -
찰스
팩토리얼 계산식을 풀어보세요
마지막엔 1과 2가 곱해져야죠 그래서 1을반환해주는겁니다