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
728x90


DOM
문서 객체 모델 (Document Object Model, DOM)은 HTMLXML 문서에 대한 응용 API를 말합니다. DOM은 문서를 구조적으로 정리하여 문서의 내용과 시각적인 형태를 변경할 수 있도록 합니다. DOM은 웹페이지와 스크립트 혹은 프로그래밍 언어를 연결합니다.


참고 페이지


W3C : http://www.w3.org/DOM/#new

위키백과 : http://ko.wikipedia.org/wiki/%EB%AC%B8%EC%84%9C_%EA%B0%9D%EC%B2%B4_%EB%AA%A8%EB%8D%B8

Mozilla : https://developer.mozilla.org/ko/DOM


728x90

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

코딩 풀이  (0) 2022.06.21
윈폼과 웹폼의 차이  (0) 2011.11.01
익스트림 프로그래밍(XP) 규칙  (0) 2011.06.28
인자 매개변수 차이  (0) 2011.06.28
728x90

윈폼과 웹폼의 차이

Windows Form
1. 윈도우 어플리케이션의 윈도우즈 폼
2. 설치가 필요.
 
WebForm
1. 웹 어플리케이션 폼(예: webpage)
2. 인터넷이 가능하면 어디서든 사용 가능
3. Windows 응용 프로그램에 적용되었던 윈폼을 웹에 적용 시킨 것.


찾아보니 내용이 없다.
근데 이거 말고 다른 식의 정의도 불가할 듯.







728x90

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

코딩 풀이  (0) 2022.06.21
Document Object Model(DOM)  (0) 2012.06.29
익스트림 프로그래밍(XP) 규칙  (0) 2011.06.28
인자 매개변수 차이  (0) 2011.06.28
728x90

익스트림 프로그래밍(XP, eXtreme Programming) 규칙


조금씩, 하지만 자주 발표한다.
사이클을 반복해서 돌리면서 개발한다.
스펙에 없는 것은 절대 질어넣지 않는다.
테스트 코드를 먼저 만든다.
야근은 하지 마라. 항상 정규 일과 시간에만 작업한다.
기회가 생기는 족족 언제 어디서든 코드를 개선한다.
모든 테스트를 통과하기 전에는 어떤 것도 발표하지 않는다.
조금씩 발표하는 것을 기반으로 하여 현실적인 작업 계획을 만든다.
모든 일을 단순하게 처리한다.
두 명씩 팀을 편성하고 모든 사람이 대부분의 코드를 알 수 있도록 돌아가면서 작업한다.


몇 가지라도 지키면서 일하자.

728x90

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

코딩 풀이  (0) 2022.06.21
Document Object Model(DOM)  (0) 2012.06.29
윈폼과 웹폼의 차이  (0) 2011.11.01
인자 매개변수 차이  (0) 2011.06.28
728x90

인자( Argument ) 는 어떤 함수를 호출시에 전달돼는 값을 말하고
매개 형식 변수( Parameter ) 는 그 전달된 인자를 받아들이는 변수다.

여기서 포인트는 
인자는 값, 매개 형식 변수는 말 그대로 변수라는 점이다.

예를 들면 이런거지.

void Func( int A )
{
    int B = 0;
    printf("%d\n",A);
}

int main( int argc, char* argv[] )
{
    int MyAge = 31;
    Func( MyAge );
}

여기서 인자는 Func() 함수를 호출할때 전달돼는 MyAge 이고
Func() 함수 구현 부의 헤더 부( 함수이름, 반환값, 매개 변수 )의 int A 가 매개 형식 변수이다.

뭐 인자야 별거 없으니 이정도로 마무리 짓고
매개 형식 변수에 대해 조금만 더 깊이 들어가 봅시다. 

간단히 호출 스택 얘기부터 시작해봅시다.
이 호출 스택( 다른 말로 Activation Record )은 
함수를 호출할시 그에 대한 정보 유지 및 관리 용도로 사용돼는 일종의 자료구조다.

프로그램이 실행돼면 CPU가 PC( Program Counter : 현재 실행할 지점의 코드를 가르키는 역할 )를 이용해 
코드를 훑고 내려가는데 이때 함수 호출 부를 만났다면

호출된 함수의 정보를 유지하기 위해 스택 공간에 메모리를 할당하는데 
그 크기는 그 함수의 매개 변수와 함수 블록 내에서 선언된 지역 변수의 전체 크게에 의해 결정된다.
- 그 밖에 복귀 주소( Return Address : 호출된 함수가 종료될시 실행흐름( PC)이 돌아가야할 주소 )등이 
   이 호출스택에 들어간다.

그런 다음, 함수의 인자가 이미 앞서 할당됐던 매개 변수에 대입된다.
- 매개 변수에 인자가 어떤 순서로 대입돼는지는 호출 규약에 따른다.

결론은 매개 형식 변수의 성질은 사실 지역 변수와 동일하다는 거다.
-물론 인자는 못 받겠지만.

728x90

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

코딩 풀이  (0) 2022.06.21
Document Object Model(DOM)  (0) 2012.06.29
윈폼과 웹폼의 차이  (0) 2011.11.01
익스트림 프로그래밍(XP) 규칙  (0) 2011.06.28

+ Recent posts