순환의 다른문제.
빵돌
질문 내용 :
#include stdio.h
int factorial(int n);
int main()
{
factorial(3);
return 0;
}
int factorial(int n)
{
printf(factorial(%d)\n,n);
if(n == 1) return(1);
else return (n*factorial(n-1));
}
어제 답변을 얻었지만, 이와비슷한 문제를 풀어보니 답이 틀리게 나오더라구요, 제가 잘못이해한것 같습니다.
절차적으로 어떻게 실행되는지 설명좀 해주시면 안될까요? ..
출력에 factorial(2) 2출력에 (1)이되고 1출력과 함께 (n==1) 를 만족해서 1을 리턴해줘서 어떻게 반환값이 6이 나오는거죠? 출력되는관계는 알겠는데 계산 부분이 이해가 안되서요. 예를 들면
#include stdio.h
int recursive(int n);
int main()
{
recursive(5);
return 0;
}
int recursive(int n)
{
printf(%d\n,n);
if(n1) return 2;
else return( 2*revursive(n-1)+1);
}
를 계산할라치면 제가 이해가 안되서 반환총값?이 틀리게 계속 나오더라구요. 제가 뭔 잘못이해한듯한데..휴..
5~0까지 출력될거지만 반환총값이 얼마가 되는지 어떤철차식으로 실행되는지가 이해가 안되요~~
-
누리봄
제길슨,, 왜 자꾸 이해가 안되는거지..바본가..ㅜㅜ
-
민트향
답변감사드립니다.
-
우람늘
다음과 같은 순서로 처리가 됩니다.
r(5) = 2 * r(4) + 1
r(5) = 2 * (2 * r(3) + 1) + 1
r(5) = 2 * (2 * (2 * r(2) + 1) + 1) + 1
r(5) = 2 * (2 * (2 * (2 * r(1) + 1) + 1) + 1) + 1
r(5) = 2 * (2 * (2 * (2 * (2 * r(0) + 1) + 1) + 1) + 1) + 1
r(5) = 2 * (2 * (2 * (2 * (2 * 2 +