int f(int n)
{
if (n==0)
return 1;
else
return n*f(n-1);
위는 팩토리얼정수를 구하는 재귀함수인데요.
이해가가지않는게 제가 여태껏 배운걸로 보면 n=5를 전달받을경우
5*f(5-1); // n=4 , 20 반환
4*f(4-1); // n=3 , 12 반환
3*f(3-1); // n=2 , 6 반환
2*f(2-1); // n=1 , 2 반환
1*f(1-1); // n=0 , 1 반환하며 함수를 탈출하게되는데,
그럼 main 함수에서
result=f(5);를 했을떄
출력값은 20+12+6+2+1= 41이 되어야하는거아닌가요? 왜 출력하면 120이 나올까요??... ㅠㅠㅠㅠ
그리고 함수 탈출조건에 return 0;이 아닌 return 1; 이 나오는 이유는 뭔가요??
독학인데다가 교재엔 너무 부실하게 설명되어있어서 물어볼데가 여기밖에없네요 답부탁드립니다!ㅜㅜ
0하면 반환값이 0인데 그럼 무조건 0나오지.. - dc App
// 아 그러네요 ㅜㅜ 하.. 재귀함수 넘나어렵..
반환값에 곱하기 해주고 왜 더하기 한게 안나오냐고 말하면.. - dc App
*기호 모름?
팩토리얼이먼지모르냐???
5*f(4)가 5*4*f(3)로 늘어나고 이건 다시 5*4*3*f(2)로늘어나고 다시 5*4*3*2*f(1)인데 f(1)은 1이라 함수정의되있으니까 늘어나는게 끝나고 곱셈할일만 남음
어디에도 더한다는 명령이 없는데 어디서 착각한거지
2016052// 형님!!!! 감사합니다 갑자기 머리가 뻥 뚫린느낌이네요. return n*f(n-1); 이면 변수에 반환하는값은 현재의 n* 만 반환하는걸로 이해했는데 맞나요??!!!
저 상태로는 반환 못해요
계속 펼쳐지다 반환되는거임
바로 반환은못하고 메모리에 n*가 쌓이다가 n==0이 됐을때 쌓아둔 메모리를 반환하는게 맞는거죠??!
오오오옷 감사합니닷ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋc언어는ㄴ 넘나재밌는언어네요
ㅇㅋ