본문 바로가기
깨알 c언어

깨알 c언어 ch.51 ~ 55

by moca7 2024. 3. 11.

51. STATIC 변수(3)

52. STATIC 변수(4)

53. 재귀함수(1)

54. 재귀함수(2)

55. 재귀함수(3)

 

 

 

51. STATIC 변수(3)

 

ㅁ 문제

 

 

- 출력결과

F1 = 2, F2 = 6,  F3 = 2,  F4 = 3

 

 

52. STATIC 변수(4)

 

ㅁ 문제

 

- 첫번째 func()

a는 101이 됨. b는 201이 됨. 

전역변수 c는 30에서 101이 됨.

 

- 두번째 func()

a는 102가 됨. b는 201이 됨.

전역변수 c는 101에서 102가 됨.

 

- 출력

a= 10, b=20, c=102

 

static이 선언된 함수는 func에서 선언이 되었다.

static한 a는 func에서만 사용할 수 있다. 

main함수는 func의 a를 사용할 수 없다.

 

정적변수는 지역변수와 전역변수의 특징을 다 갖는다.

선언된 함수 내에서만 사용 가능하다는 점에서 지역변수의 특성.

함수가 종료되도 메모리에 남는다는 점에서 전역변수의 특성.

 

 

53. 재귀함수(1)

 

ㅁ 재귀함수

- 함수 내에서 자기의 함수(나)를 다시 호출하는 함수

- 스택 내에 차곡차곡 쌓아두었다가 일괄로 처리를 한다. 

 

ㅁ 문제

 

1) i=5

5%2 == 1은 참.

func(5) : func(5)의 값 출력.

 

- func(5)

거짓이므로 5 * fun(4) 리턴

- func(4)

거짓이므로 4 * func(3) 리턴

- func(3)

거짓이므로 3 * func(2) 리턴

- func(2)

거짓이므로 2 * func(1) 리턴

- func(1)

참이므로 1을 리턴함. 

- func(2) 

2를 리턴

- func(3) 

6을 리턴

- func(4)

24를 리턴

- func(5)

120을 리턴

 

출력. func(5) :120 

 

2) i=4

if 조건이 거짓

3) i=3

3%2 == 1은 참.

 

출력. func(3) : 6 

4) i=2

if 조건이 거짓

5) i=1

1을 2로 나누면 몫이 0 나머지 1      <-  1을 2로 나눌 수가 없으므로.

출력. func(1) : 1

 

6) i=0

0을 2로 나누면 몫이 0 나머지 0  

 

- 분자가 0인건 되지만 분모가 0인건 안된다. 

- 4를 2로 나누면 몫은 2 나머지는 0, 2를 4로 나누면 몫은 0 나머지는 2

 

 

54. 재귀함수(2)

 

ㅁ 문제

 

1) f(123)

리턴은 3 + f(12)             <- 정수 나누기 정수는 정수다. 이 때 반올림 안하고 소수점 아래는 그냥 버린다. 

 

2) f(12)

리턴은 2 + f(1)

 

3) f(1)

리턴은 1 + f(0)              <- 0.몇이므로 그냥 0

 

4) f(0)

리턴은 0

 

- f(1)의 값은 1

- f(12)의 값은 3

- f(123)의 값은 6 

 

 

55. 재귀함수(3)

 

ㅁ 문제

 

- func(19)

19%2 == 1은 참.

n=18이 됨

18 == 0은 거짓.

리턴 func(16)+18

 

- func(16)

16%2 == 1은 거짓.

16 == 0은 거짓.

리턴 func(14)+16

 

- func(14)

14%2 == 1은 거짓.

14 == 0은 거짓.

리턴 func(12)+14

 

- func(12)

12%2 == 1은 거짓.

12 == 0은 거짓.

리턴 func(10)+12

 

- func(10)

10%2 == 1은 거짓.

10 == 0은 거짓.

리턴 func(8) + 10

 

- func(8)

8%2 == 1은 거짓.

8 == 0은 거짓.

리턴 func(6) + 8

 

- func(6)

6%2 == 1은 거짓.

6 == 0은 거짓.

리턴 func(4) +6

 

- func(4)

4%2 == 1은 거짓.

4 == 0은 거짓.

리턴 func(2) + 4

 

- func(2)

2%2 == 1은 거짓.

2 == 0은 거짓.

리턴 func(0) + 2

 

- func(0)

0%2 == 1은 거짓.

0 == 0은 참.

리턴 0

 

- result=90

 

- 0은 짝수.

 

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

깨알 c언어 특강 01 ~ 03  (0) 2024.03.11
깨알 c언어 ch.56 ~ 60  (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