관리 메뉴

FU11M00N

C언어 스택의 기본개념과 재귀함수의 개념 본문

Programming/C Language

C언어 스택의 기본개념과 재귀함수의 개념

호IT 2020. 4. 13. 03:59

스택이란??

  • 스택이란 메모리에서 존재하는 스택 공간에서 지역변수와 매개변수 등을 저장하는 공간입니다.
  • 스택이란 무언가를 차곡차곡 쌓는다는 의미입니다.
  • FILO(First In Last Out, 선입 후출) 이라고도 하고, LIFO(Last In First Out, 후입 선출)입니다.

사진으로 설명하자면 아래와 같습니다.

사진1-1

바나나,복숭아,포도가 들어있고 순서대로 바나나 -> 복숭아 -> 포도 순으로 스택안에 들어갑니다.

사진1-2

그럼 바나나가 맨마지막에, 포도가 맨 위에있는모습이고.

사진1-3

포도->복숭아->바나나 순으로 나오게됩니다!

 

사진1-4

사진 1-1을 보면 main함수에서 sub함수를 호출하고, 값을 10,50,100씩 넘겨주며 

sub함수는 그 값들을 출력하고 있습니다. 위의 값들이 스택에서는

한공간만을 썼다가 소멸되고 한공간 썼다가 소멸되고를 반복하여 즉 스택에서는 한공간만 차지하는 원리입니다.

그림으로 표현하자면 아래와 같습니다.

사진1-5
사진1-6

그럼 이번엔 재귀 함수를 알아볼까요? 재귀 함수는 자기 자신을 호출하는 함수를 재귀 함수라고 부릅니다.

재귀함수는 3가지의 특징이 존재합니다.

  • 무한 루프에 빠지지 않도록 실행 조건이 변경되면서 탈출 조건이 있어야한다.
  • 복잡한 코드를 재귀함수를 사용함으로써 단순화할 수 있다.
  • 디버깅이 어렵고 실행 흐름을 파악하기 어려운 단점이 있다.

사진1-7

1. 코드를 보면 main함수에서 function에게 3의 값을 넘겨주고,

2. function 함수에서는 int b의 매개변수로 b의 값과 b의 주소를 출력한 뒤,

3. function(b-1)이라는 재귀 함수를 만납니다. 재귀 함수에서는 오른쪽의 사진 처럼 3,2,1,0 까지

   값과 주소를 출력하게 됩니다.

 

(다음 사진과 함께 봐야 이해가 잘될것입니다! 그럼 넘어가서)

사진1-8

(사진이 많이 혼잡하네요,, 죄송합니다..)

1 .b가 0이 되었을 때 return을 합니다. 즉 자기 자신을 부른 함수인 b가 1일 때로 돌아갑니다.

2. b가 1일때 돌아가서 출력문을 만나 출력을 한 뒤 b=1일때의 스택공간은 소멸하게되고 반복적으로,

3. b가 2일 때 돌아가 출력하고 b=2 스택 공간이 소멸이 되고 ,

4. b가 3일 때까지 그림의 화살표대로 출력을 모두 하게 됩니다. 그후 b=3일때도 소멸이됩니다.

 

(소멸이되는 그림은 안그렸지만 상상해주시면 감사하겠습니다.)

사진 1-9

그럼 같은 주소끼리 출력이 된 것을 확인할 수 있습니다!

 

이렇게 재귀함수에대해 간단히 알아봤는데요, 필자가 그림실력과 표현실력이 안좋아서 죄송합니다..

그럼 즐거운 하루 보내세요!

Comments