티스토리 뷰

* 매개변수 전달 방법

- Call by value

- Call by reference                       ---> 포인터

* 스택 프레임 그리는 방법                     ---> 중요

-------------------------------------------------- 함수 응용1

* 재귀호출

- 재귀호출을 이용한 문자열 출력

- 재귀호출의 장/단점

* 문자/문자열 처리 함수

- 문자 처리 함수

- 문자열 처리 함수

- 유니코드 문자열

* 유틸리티 함수

- atoi, atol, atof

- time, localtime, ctime

- srand, rand

- system, exit

-------------------------------------------------- 함수 응용2




* 재귀호출

- 함수가 함수를 호출하고, 그 함수는 또 다른 함수를 호출하고...  --> callstack

- stack은 위로 쌓아 올린다...

- stack 구조는 어느경우에 적당한가

. 가장 최근의 일을 가장 위로...

. 함수 call -> call -> call .. 반환.. 반환 ... 반환   ... stack의 구조가 좋아...  



ex) 반복문을 이용한 5 팩토리얼 계산

#include <stdio.h>


int main(void)

{

int i=0, nFact=1;

for(i=5;i>=1;--i)

nFact=nFact*i;


printf("5! == %d\n",nFact);

return 0;

}

-----------------------------

결과) 5! == 120


ex) 재귀호출을 이용한 5 팩토리얼 계산

#include <stdio.h>


int GetFactorial(int nParam)

{

int nResult=0;

if(nParam==1) return 1;


nResult=nParam*GetFactorial(nParam -1);

return nResult;

}


int main(void)

{

printf("5! == %d\n", GetFactorial(5));

return 0;

}

-----------------------------

결과) 5! == 120


ex)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void PutData(char *pszParam)
{
    if(*pszParam=='\0')
    return;

    putchar(*pszParam);        // 찍고

    PutData(pszParam + 1);    // 또 호출하고     --> 윗줄 아랫줄 순서를 바꾸면 호출된 함수를 빠져나가면서(반환) TestData의 역순으로,
}                                        // 즉, ataDtseT 순으로 찍게된다.

                                          // 스택은 가장 먼저 push한  정보가 가장 나중에 pop(LIFO) 구조임. 엑셀/워드의 undo(ctrl+z) 와 유사..


int main(void)

{
    PutData("TestData");
    putchar('\n');
 
    return 0;

}

---------------------------------

결과) TestData


재귀호출의 단점

stack의 크기가 1MB정도이므로 스택 메모리를 순식간에 대량으로 소모할 가능성이 있다. -- stack overflow


이러한 이유로 사용할 때는 신중을 기해야 함.

반복문으로 가능하다면 반복문을 쓰는게 맞다. 그러나 비선형 자료구조인 트리를 다룰때는 대부분 재귀호출을 사용하고, 그게 맞다. (17:36')





* 문자열 처리 함수

문자열 상수?  ... 상수X

... 상수화된 문자 배열O




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함