일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카카오프로젝트100
- 랜섬웨어
- 다크웹
- oracle db
- 깃허브
- php
- 보안뉴스 한줄요약
- python
- 보안뉴스요약
- oracle
- 보안뉴스
- javascript
- 자바스크립트
- 자바스크립트 API
- 자바스크립트 node
- 자바스크립트 jQuery
- 자바스크립트 element api
- 오라클
- 파이썬
- GIT
- 보안뉴스한줄요약
- 보안뉴스 요약
- 자바스크립트 객체
- Oracle SQL
- 카카오프로젝트 100
- numpy
- ES6
- 카카오프로젝트
- 자바스크립트 기본 문법
- 자바스크립트 prototype
- Today
- Total
FU11M00N
C언어 스택의 기본개념과 재귀함수의 개념 본문
스택이란??
- 스택이란 메모리에서 존재하는 스택 공간에서 지역변수와 매개변수 등을 저장하는 공간입니다.
- 스택이란 무언가를 차곡차곡 쌓는다는 의미입니다.
- FILO(First In Last Out, 선입 후출) 이라고도 하고, LIFO(Last In First Out, 후입 선출)입니다.
사진으로 설명하자면 아래와 같습니다.
바나나,복숭아,포도가 들어있고 순서대로 바나나 -> 복숭아 -> 포도 순으로 스택안에 들어갑니다.
그럼 바나나가 맨마지막에, 포도가 맨 위에있는모습이고.
포도->복숭아->바나나 순으로 나오게됩니다!
사진 1-1을 보면 main함수에서 sub함수를 호출하고, 값을 10,50,100씩 넘겨주며
sub함수는 그 값들을 출력하고 있습니다. 위의 값들이 스택에서는
한공간만을 썼다가 소멸되고 한공간 썼다가 소멸되고를 반복하여 즉 스택에서는 한공간만 차지하는 원리입니다.
그림으로 표현하자면 아래와 같습니다.
그럼 이번엔 재귀 함수를 알아볼까요? 재귀 함수는 자기 자신을 호출하는 함수를 재귀 함수라고 부릅니다.
재귀함수는 3가지의 특징이 존재합니다.
- 무한 루프에 빠지지 않도록 실행 조건이 변경되면서 탈출 조건이 있어야한다.
- 복잡한 코드를 재귀함수를 사용함으로써 단순화할 수 있다.
- 디버깅이 어렵고 실행 흐름을 파악하기 어려운 단점이 있다.
1. 코드를 보면 main함수에서 function에게 3의 값을 넘겨주고,
2. function 함수에서는 int b의 매개변수로 b의 값과 b의 주소를 출력한 뒤,
3. function(b-1)이라는 재귀 함수를 만납니다. 재귀 함수에서는 오른쪽의 사진 처럼 3,2,1,0 까지
값과 주소를 출력하게 됩니다.
(다음 사진과 함께 봐야 이해가 잘될것입니다! 그럼 넘어가서)
(사진이 많이 혼잡하네요,, 죄송합니다..)
1 .b가 0이 되었을 때 return을 합니다. 즉 자기 자신을 부른 함수인 b가 1일 때로 돌아갑니다.
2. b가 1일때 돌아가서 출력문을 만나 출력을 한 뒤 b=1일때의 스택공간은 소멸하게되고 반복적으로,
3. b가 2일 때 돌아가 출력하고 b=2 스택 공간이 소멸이 되고 ,
4. b가 3일 때까지 그림의 화살표대로 출력을 모두 하게 됩니다. 그후 b=3일때도 소멸이됩니다.
(소멸이되는 그림은 안그렸지만 상상해주시면 감사하겠습니다.)
그럼 같은 주소끼리 출력이 된 것을 확인할 수 있습니다!
이렇게 재귀함수에대해 간단히 알아봤는데요, 필자가 그림실력과 표현실력이 안좋아서 죄송합니다..
그럼 즐거운 하루 보내세요!
'Programming > C Language' 카테고리의 다른 글
[C언어] C언어 <stdint.h> 헤더파일 (0) | 2020.04.18 |
---|---|
C언어 함수포인터 (0) | 2020.04.14 |
C언어 포인터 와 배열 이해와 차이점 (0) | 2020.04.14 |
C언어 포인터 기본 (0) | 2020.04.10 |
C언어 자료형과 메모리의 기본적인 이해 (0) | 2020.04.03 |