Kitel algorithm 1_recursive

Preview:

Citation preview

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

• 코드 간소화 .

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

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

재귀

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

%parm_b) : parm_b;}

아까 만났던 그 녀석

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

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Push

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Push

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Push

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Pop

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Pop

Stack

• 가장 기초적인 Data structure

• Push, Pop

• FILO(First In Last Out)

Pop

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

• 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

재귀는 이럴때 유용하다

• 좌우대칭 산모양

• 대칭 !

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

좌우대칭 산모양

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

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

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

좌우대칭 산모양 - CODE

N=3

CALL STACK

현재 위치

다시 시작

좌우대칭 산모양 - CODE

PUSH

CALL STACKrecursive(3);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

3

좌우대칭 산모양 - CODE

PUSH

recursive(3);

CALL STACK

recursive(2);

3

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2

좌우대칭 산모양 - CODE

PUSH

CALL STACKrecursive(3);recursive(2);

2

recursive(1);

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

1

recursive(1);

좌우대칭 산모양 - CODE

PUSH

CALL STACKrecursive(3);recursive(2);

1

recursive(1);recursive(0);

좌우대칭 산모양 - CODE

CALL STACK

0

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

좌우대칭 산모양 - CODE

CALL STACK

0

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

좌우대칭 산모양 - CODE

POP

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

좌우대칭 산모양 - CODE

CALL STACK

1

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

좌우대칭 산모양 - CODE

CALL STACK

11

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

좌우대칭 산모양 - CODE

PUSH

CALL STACK

11

recursive(0);

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

좌우대칭 산모양 - CODE

CALL STACK

10

recursive(0);

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

좌우대칭 산모양 - CODE

POP

CALL STACK

1

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

좌우대칭 산모양 - CODE

CALL STACK

11

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

좌우대칭 산모양 - CODE

CALL STACK

11

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

좌우대칭 산모양 - CODE

POP

CALL STACK

1

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

recursive(3);recursive(2);

좌우대칭 산모양 - CODE

CALL STACK

1

recursive(3);recursive(2);

2

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

212

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2

PUSH

12

recursive(1);

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

112

recursive(1);

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

112

recursive(1);

PUSH

recursive(0);

좌우대칭 산모양 - CODE

CALL STACK

120

recursive(0);

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

좌우대칭 산모양 - CODE

POP

CALL STACK

12

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

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

112

recursive(1);

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

1121

recursive(1);0 생략

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

121

0 생략

POP

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2121

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);recursive(2);

2121

좌우대칭 산모양 - CODE

CALL STACKrecursive(3);

121

POP

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

3121

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213

recursive(2);

PUSH

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213

recursive(2);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213

recursive(2);recursive(1);

PUSH

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

11213

recursive(2);

0 생략recursive(1);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

112131

recursive(2);recursive(1);

0 생략

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

112131

recursive(2);recursive(1);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

12131

recursive(2);

POP

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

212131

recursive(2);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

2121312

recursive(2);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

1121312

recursive(2);recursive(1);

0 생략

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

11213121

recursive(2);recursive(1);

0 생략

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

11213121

recursive(2);recursive(1);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

1213121

recursive(2);

POP

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213121

recursive(2);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

21213121

recursive(2);

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

1213121

POP

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213121

좌우대칭 산모양 - CODE

recursive(3);

CALL STACK

31213121

좌우대칭 산모양 - CODE

CALL STACK

1213121

POP

좌우대칭 산모양 - CODE

1213121

좌우대칭 산모양 - CODE

1213121

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

다 그렸다 ..

그냥 산 하나만 그려보자

그냥 산 하나만 그려보자