69
Why Recursive? 알알알알 알알알 알알알알 . 알알 알알알 . 알알알 알알알 알알알 알알 . 알알알 알알 알알알알 알알알알 알 알 . 알알알 알알알알 알알

Kitel algorithm 1_recursive

  • Upload
    -

  • View
    105

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Kitel algorithm 1_recursive

Why Recursive?• 알고리즘 시험은 시간싸움 .

• 코드 간소화 .

• 스택을 구현할 필요가 없다 .

• 하지만 실제 개발할때 사용하면 개 발 . 시스템 과부하가 크다

Page 2: Kitel algorithm 1_recursive

재귀

int gcd(int parm_a, int parm_b){return b ? gcd(parm_b, parm_a

%parm_b) : parm_b;}

아까 만났던 그 녀석

• 함수가 Call-Stack 에 차곡차곡 쌓였다가 가장 늦게 들어온 녀석부터 빠져나간다 .

Page 3: Kitel algorithm 1_recursive

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Page 4: Kitel algorithm 1_recursive

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Push

Page 5: Kitel algorithm 1_recursive

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Push

Page 6: Kitel algorithm 1_recursive

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Push

Page 7: Kitel algorithm 1_recursive

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Pop

Page 8: Kitel algorithm 1_recursive

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Pop

Page 9: Kitel algorithm 1_recursive

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Pop

Page 10: Kitel algorithm 1_recursive

재귀• 좀 더 착하게 생긴 녀석이랑 놀아보자

• int makeTen(int parm){if(parm<10){return makeTen(parm+1);}else if(parm>10){return makeTen(parm-1);}else{return parm;}

}

printf(“%d\n”,makeTen(5)); ==> 10

Page 11: Kitel algorithm 1_recursive

재귀는 이럴때 유용하다

• 좌우대칭 산모양

• 대칭 !

• Back tracking. 무언가를 찾아야 할 때 .

Page 12: Kitel algorithm 1_recursive

좌우대칭 산모양

• http://59.23.113.171/30stair/pTp/pTp.php?pname=pTp

• 재귀 ! 샌드위치를 잘 만들어 보세요 .

• 싫으면 알아서 잘 해보세요 . 김밥을 드시던가 .

Page 13: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

N=3

CALL STACK

현재 위치

다시 시작

Page 14: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

PUSH

CALL STACKrecursive(3);

Page 15: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

3

Page 16: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

PUSH

recursive(3);

CALL STACK

recursive(2);

3

Page 17: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2

Page 18: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

PUSH

CALL STACKrecursive(3);recursive(2);

2

recursive(1);

Page 19: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

1

recursive(1);

Page 20: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

PUSH

CALL STACKrecursive(3);recursive(2);

1

recursive(1);recursive(0);

Page 21: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

0

recursive(3);recursive(2);recursive(1);recursive(0);

Page 22: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

0

recursive(3);recursive(2);recursive(1);recursive(0);

Page 23: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

POP

CALL STACKrecursive(3);recursive(2);recursive(1);

Page 24: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

1

recursive(3);recursive(2);recursive(1);

Page 25: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

11

recursive(3);recursive(2);recursive(1);

Page 26: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

PUSH

CALL STACK

11

recursive(0);

recursive(3);recursive(2);recursive(1);

Page 27: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

10

recursive(0);

recursive(3);recursive(2);recursive(1);

Page 28: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

POP

CALL STACK

1

recursive(3);recursive(2);recursive(1);

Page 29: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

11

recursive(3);recursive(2);recursive(1);

Page 30: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

11

recursive(3);recursive(2);recursive(1);

Page 31: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

POP

CALL STACK

1

recursive(5);recursive(4);recursive(3);recursive(2);

recursive(3);recursive(2);

Page 32: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

1

recursive(3);recursive(2);

2

Page 33: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

212

Page 34: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2

PUSH

12

recursive(1);

Page 35: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

112

recursive(1);

Page 36: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

112

recursive(1);

PUSH

recursive(0);

Page 37: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

120

recursive(0);

recursive(3);recursive(2);recursive(1);

Page 38: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

POP

CALL STACK

12

recursive(3);recursive(2);recursive(1);

Page 39: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

112

recursive(1);

Page 40: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

1121

recursive(1);0 생략

Page 41: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

121

0 생략

POP

Page 42: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2121

Page 43: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2121

Page 44: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);

121

POP

Page 45: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

3121

Page 46: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213

Page 47: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213

recursive(2);

PUSH

Page 48: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213

recursive(2);

Page 49: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213

recursive(2);recursive(1);

PUSH

Page 50: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

11213

recursive(2);

0 생략recursive(1);

Page 51: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

112131

recursive(2);recursive(1);

0 생략

Page 52: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

112131

recursive(2);recursive(1);

Page 53: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

12131

recursive(2);

POP

Page 54: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

212131

recursive(2);

Page 55: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

2121312

recursive(2);

Page 56: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

1121312

recursive(2);recursive(1);

0 생략

Page 57: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

11213121

recursive(2);recursive(1);

0 생략

Page 58: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

11213121

recursive(2);recursive(1);

Page 59: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

1213121

recursive(2);

POP

Page 60: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213121

recursive(2);

Page 61: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213121

recursive(2);

Page 62: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

1213121

POP

Page 63: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213121

Page 64: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213121

Page 65: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

CALL STACK

1213121

POP

Page 66: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

1213121

Page 67: Kitel algorithm 1_recursive

좌우대칭 산모양 - CODE

1213121

다 그렸다 ..다 그렸다 ..

다 그렸다 ..

Page 68: Kitel algorithm 1_recursive

그냥 산 하나만 그려보자

Page 69: Kitel algorithm 1_recursive

그냥 산 하나만 그려보자