728x90

친구가 요청한 코딩 풀이

 

문제

#include <stdio.h>

int recursive(int n)
{
	int i;
    if (n < 1)
    	return 2;
    else 
    {
    	i = (2*recursive(n-1)) + 1;
        printf("%d\n", i);
        return i;
    }
}

int main()
{
	int i;
    printf("숫자를 입력하시오 : ");
    scanf("%d", &i);
    recursive(i);
}

/* Q. 위 값에 5를 입력한 경우 출력 되는 값을 확인 하시오 */

 

 

풀이

int recursive(5)
{
    int i;
    if (5 < 1)
    {
        return 2;
    }
    else
    {
        i = (2 * recursive(5-1)) + 1;

        /* 위의 recursive(4)로 호출 START */
        int recursive(4)
        {
            int i;
            if (4 < 1)
            {
                return 2;
            }
            else
            {
                i = (2 * recursive(4-1)) + 1;

                /* 위의 recursive(3)로 호출 START */
                int recursive(3)
                {
                    int i;
                    if (3 < 1)
                    {
                        return 2;
                    }
                    else
                    {
                        i = (2 * recursive(3-1)) + 1;

                        /* 위의 recursive(2)로 호출 START */
                        int recursive(2)
                        {
                            int i;
                            if (2 < 1)
                            {
                                return 2;
                            }
                            else
                            {
                                i = (2 * recursive(2-1)) + 1;

                                /* 위의 recursive(1)로 호출 START */
                                nt recursive(1)
                                {
                                    int i;
                                    if (1 < 1)
                                    {
                                        return 2;
                                    }
                                    else
                                    {
                                        i = (2 * recursive(1-1)) + 1;

                                        /* 위의 recursive(0)로 호출 START */
                                        int recursive(0)
                                        {
                                            int i;
                                            if (0 < 1)
                                            {
                                                /* 이 로직을 타고 recursive(0)의 리턴 값 2 */
                                                return 2;
                                            }
                                            else
                                            {
                                                /* 타지 않는 로직 */
                                                i = (2 * recursive(0-1)) + 1;
                                                printf("%dwn", i);	
                                                return i;
                                            }
                                        }
                                        /* 위의 recursive(0)로 호출 END */

                                        /*
                                            recursive(0) 의 리턴값 2이므로 
                                            i = (2 * 2) + 1
                                            i = 5
                                        */
                                        printf("%dwn", i);	// i 값 5출력
                                        return i;           // recursive(1)의 리턴 값은 5
                                    }
                                }
                                /* 위의 recursive(1)로 호출 END */

                                /*
                                    recursive(1) 의 리턴값 5이므로 
                                    i = (2 * 5) + 1
                                    i = 11
                                */
                                printf("%dwn", i);	// i 값 11출력
                                return i;           // recursive(2)의 리턴 값은 11
                            }
                        }
                        /* 위의 recursive(2)로 호출 END */

                        /*
                            recursive(2) 의 리턴값 11이므로 
                            i = (2 * 11) + 1
                            i = 23
                        */
                        printf("%dwn", i);  // i 값 23출력
                        return i;           // recursive(3)의 리턴 값은 23
                    }
                }
                /* 위의 recursive(3)로 호출 END */

                /*
                    recursive(3) 의 리턴값 23이므로 
                    i = (2 * 23) + 1
                    i = 47
                */
                printf("%dwn", i);  // i 값 47출력	
                return i;           // recursive(4)의 리턴 값은 47
            }
        }
        /* 위의 recursive(4)로 호출 END */

        /*
            recursive(4) 의 리턴값 47이므로 
            i = (2 * 47) + 1
            i = 95
        */
        printf("%dwn", i);  // i 값 95출력	
        return i;           // recursive(5)의 리턴 값은 95
    }
}
728x90

'개발및업무 > 기타용어정리' 카테고리의 다른 글

Document Object Model(DOM)  (0) 2012.06.29
윈폼과 웹폼의 차이  (0) 2011.11.01
익스트림 프로그래밍(XP) 규칙  (0) 2011.06.28
인자 매개변수 차이  (0) 2011.06.28

+ Recent posts