메모장
C언어 복습 9 (입력받은 숫자로 카운트다운 - 재귀함수) 본문
참고: 정덕 - <컴맹을 위한 C언어>
♨ 개인적 해석이 다분한 글임으로, 인지하지 못한 오류가 있을 수 있습니다 ♨
▣ 재귀함수
예) void func()
{
func();
return;
}
=> func함수를 호출 -> 자기 자신을 다시 호출 -> 무한 반복: return은 실행되지 않는다
-> 종료조건을 넣어서 해결
▣ 재귀함수를 이용한 카운트다운 프로그램
- 이전 프로그램의 순서
1. 사용자로부터 숫자를 입력 받는다
2. 숫자를 화면에 출력
3. 숫자를 1 감소
4. 2~3번을 입력받은 숫자만큼 반복한다
=> 재귀함수를 이용한 카운트다운 프로그램 순서
① 사용자로부터 숫자를 입력
② 숫자가 0이하면 종료, 아니면 출력
③ 숫자를 1감소
④ 2~3번 반복
▣ 위의 작성된 프로그램 순서를 생각하며 카운트다운 프로그램을 만들어본다
1. 카운트다운 재귀함수 선언 (정의는 main 하단에)
2. 숫자를 입력받는다
3. 카운트다운 재귀함수 호출
4. 카운트다운 재귀함수 정의
※ 재귀함수 내 카운트다운은 if-else문으로도 표현가능
참고
1. if문이나 반복문의 문장이 한 문장이면 중괄호 생략 가능
예) if(a<=0){ return;
=
if(a<=0) return;
2. "a=a-1" 과 "a-=1" 과 "a--"은 동일한 의미
'++' 와 '--'은 증가면산자 '++'은 변수의 값을 1 증가 // '--'은 변수의 값을 1 감소
('c++'의 '++'도 동일한 의미 - C언어에 객체지향 개념을 접목시킨 언어)
3 a--과 --a
--a는 전위증감, a--은 후위증감
증감을 먼저하느냐 참조를 먼저하느냐의 순서차이
전위증감(--a)은 1을 (더하거나) 뺀 후 값을 참조
예) 10에서 1을 뺀 후 a에 대입
후위증감(a--)은 참조한 후 1을 (더하거나) 뺀다
예) a에 10를 대입하고 1을 뺀다

∴
재귀함수 정의에서

재귀함수의 흐름
예) count(3)을 실행하였다 가정한다면
void count(3){
if(3<=0) return; // 3이 0보다 크기 때문에 return문이 실행되지 않고 밑으로 내려간다
printf("%d\n", a); // 3을 출력
count(--a); // --3이기 때문에 2, 즉 count(2)가 실행
return 0; // count(2)가 실행 완료되지 않았기 때문에 실행되지 않는다
} // 이런 신세계를 지금 발견하다니......
정답 (코드 총 정리)

코드블럭 하이라이트 바꾸는 것도 있던데 구 ㅣ찬
'C언어 복습' 카테고리의 다른 글
C언어 복습 11 (10진수를 2진수로, 비트연산자) (0) | 2019.06.22 |
---|---|
C언어 복습 10 (구구단을 외자 - 반복문) (0) | 2019.06.21 |
C언어 복습 8 (계산기) (0) | 2019.06.18 |
C언어 복습 7 (점수 평균 내기) (0) | 2019.06.15 |
C언어 복습 6 (오늘 날짜 표시) (0) | 2019.05.25 |