본문 바로가기
깨알 c언어

깨알 c언어 ch.56 ~ 60

by moca7 2024. 3. 11.

56. 재귀함수(4)

57. 재귀함수(5)

58. 중복 재귀함수(1)

59. 중복 재귀함수(2)

60. 중복 재귀함수(3)

 

 

 

56. 재귀함수(4)

 

ㅁ 문제

 

- my(5, 14)

i = 5, j = 14

i = 4가 됨. j는 13이 됨.                  <- j 빼기 1이 아니라 i다. 

                 j는 10이 됨.

출력."4, 10, "

메인 함수에 my(4, 10)을 리턴함.

메인 함수에서 my(4, 10) 수행.

 

- my(4, 10)

i = 4, j = 10

i = 3이 됨. j는 7이 됨.

출력. "3, 7, "

메인 함수에 my(3, 7)를 리턴함.

메인 함수에서 my(3, 7) 수행.

 

- my(3, 7)

i = 3, j = 7

i = 2가 됨. j는 5가 됨.

출력. "2, 5, "

메인 함수에 my(2, 5)를 리턴함.

메인 함수에서 my(2, 5) 수행.

 

- my(2, 5)

i = 2, j = 5

i와 j가 1이 되고 함수 종료.

 

- 출력결과

"4, 10, 3, 7, 2, 5, "

 

 

57. 재귀함수(5)

 

ㅁ 문제

 

- recursion(16)

리턴. 16 + recursion(15)

메인에서 recursion(15) 수행.

- recursion(15)

recursion(14) 수행

- recursion(14)

recursion(13) 수행

- recursion(13)

recursion(12) 수행

- recursion(12)

recursion(11) 수행

- recursion(11)

리턴. 11 + recursion(10)

메인에서 recursion(10) 수행.

- recursion(10)

recursion(9) 수행

- recursion(9)

recursion(8) 수행

- recursion(8)

recursion(7) 수행

- recursion(7)

recursion(6) 수행

- recursion(6)

리턴. 6 + recursion(5)

메인에서 recursion(5) 수행.

- recursion(5)

recursion(4) 수행

- recursion(4)

리턴 1

 

- 출력결과. 34

 

 

58. 중복 재귀함수(1)

 

ㅁ 문제

 

- recur(3, 2)

a = 3, b = 2 지역변수 선언.

리턴. 3 * recur(2, 3) + recur(2, 2)

                  첫번째         두번째

 

[첫번째]

- recur(2, 3)

a = 2, b = 3 지역변수 선언.

리턴. 2 * recur(1, 4) + recur(1, 3)

- recur(1, 4)

a = 1, b = 4 지역변수 선언.

리턴. 4

- recur(1, 3)

a = 1, b = 3 지역변수 선언.

리턴. 3

 

[두번째]

- recur(2, 2)

a = 2, b = 2 지역변수 선언.

리턴. 2 * recur(1, 3) + recur(1, 2)

- recur(1, 3)

a = 1, b = 3 지역변수 선언.

리턴. 3

- recur(1, 2)

a = 1, b = 2 지역변수 선언.

리턴. 2

 

- 3 * 11 + 8 = 41

출력결과. 41

 

 

59. 중복 재귀함수(2)

 

ㅁ 문제

 

- sub(4)

리턴. sub(3) + sub(2)

          첫번째   두번째

 

[첫번째]

- sub(3)

리턴. sub(2) + sub(1)

- sub(2)

리턴. sub(1) + sub(0)

- sub(1)

리턴. 1

- sub(0)

리턴. 0

 

[두번째]

- sub(2)

리턴. sub(1) + sub(0)

- sub(1)

리턴. 1

- sub(0)

리턴. 0

 

- 2 + 1 = 3

 

 

60. 중복 재귀함수(3)

 

ㅁ 문제

 

- fib(5) 호출                                             <- 호출 1

리턴. fib(4) + fib(3)                                  

         첫번째  두번째

 

[첫번재]

- fib(4) 호출                                             <- 호출 2

리턴. fib(3) + fib(2)                                                         <- 1번 호출이 아님.

- fib(3) 호출                                             <- 호출 3

리턴. fib(2) + fib(1)

- fib(2) 호출                                             <- 호출 4

리턴. fib(1) + fib(0)

- fib(1) 호출                                             <- 호출 5

리턴. 1

- fib(0) 호출                                             <- 호출 6

리턴. 0

 

- fib(1) 호출                                              <- 호출 7

- fib(2) 호출                                              <- 호출 8

- fib(1) 호출                                                                      <- 호출 14

- fib(0) 호출                                                                      <- 호출 15

 

- 첫번째 fib(4)는 3

 

[두번째]

- fib(3) 호출                                             <- 호출 9

리턴. fib(2) + fib(1)

- fib(2) 호출                                             <- 호출 10

리턴. fib(1) + fib(0)

- fib(1) 호출                                             <- 호출 11

리턴. 1

- fib(0) 호출                                             <- 호출 12

리턴. 0

 

- fib(1) 호출                                              <- 호출 13

- 두번째 fib(3)은 2

 

- fib(5)는 5, fib()가 호출되는 횟수는 13                 <- 15

'깨알 c언어' 카테고리의 다른 글

깨알 c언어 특강 01 ~ 03  (0) 2024.03.11
깨알 c언어 ch.51 ~ 55  (0) 2024.03.11
깨알 c언어 ch.46 ~ 50  (0) 2024.03.10
깨알 c언어 ch.41 ~ 45  (0) 2024.03.10
깨알 c언어 ch.36 ~ 40  (0) 2024.03.09