
이번 글을 통해 배워갈 내용
- 재귀에 대한 정의
- 재귀를 C++로 구현해 보기
재귀어는 오늘도 졸립니다.
아침 6시 반에 일어나서 SI 파견 업체에서 저녁까지 야근을 하다 퇴근을 하였기 때문입니다.

재귀어는 피곤합니다.
잠이 자고 싶습니다.
그러나 재귀어 에게는 꿈이 있습니다.
그건 바로
최고의 전문가 프로그래머가 되는 꿈입니다.
그런의미에서 재귀어는 공부를 시작합니다.
퇴근 후 집에 도착하자 밤 9시!
재귀어는 허겁지겁 밥을 먹고
공부를 시작합니다.
재귀어가 오늘도
새벽 한시까지 공부를 한다고 가정했을때
재귀어가 4시간 공부 할수 있다고 가정합니다.
한시간씩 공부를 할때마다가 10씩 배움을 얻을수 있다면
재귀어는 총 40의 배움을 구한다는 것을 쉽게
머리로 계산 가능합니다.
그렇다면
어떻게 재귀적으로 생각하고
재귀적으로 프로그램을 통해 구현 할수 있을까요?
간단한 프로그래밍을 통해 설명해드리겠습니다.
#include <iostream>
using namespace std;
int studyFn(int myTime)
{
if(myTime == 0)
{
return 0;
}
return (studyFn(myTime - 1) + 10);
}
int main()
{
// 공부한 량
int myStudyUnit = 0;
// 남은 시간
int myTimeLeft = 4;
cout<<studyFn(myTimeLeft);
return 0;
}
위에 코드의 출력되는 값을 5분이내에 구해보시고 답이 안나오신다면
설명을 읽어주신뒤 타이핑 해주시면 됩니다.
설명하겠습니다.
1.
공부한 량(myStudyUnit)은 처음에 0입니다.
남은 시간(myTimeLeft)은 처음에 4입니다.
2.
제가 만든 임의의 함수 studyFn에 남은 시간 4를 넙니다.
3.
공부한 량(myStudyUnit)은 0입니다.
남은 시간(myTimeLeft)은 4입니다.
시간이 0이 아니기 때문에 if문을 넘깁니다.
반환되는 (return) 곳에 함수가 자기 자신을 부릅니다.
인자값은 -1입니다.
따라서
반환되는 값은
(studyFn(4 - 1) + 10);
일겁니다.
4.
다시 파란 부분에 들어갑니다.
공부한 량(myStudyUnit)은 0입니다.
남은 시간(myTimeLeft)은 3입니다.
반환되는 값은(studyFn(3- 1) + 10);
입니다
5. 다시 들어갑니다.
반환되는 값은(studyFn(2- 1) + 10);
6. 다시 들어갑니다.
반환되는 값은(studyFn(1- 1) + 10);
입니다.
7.
받은 인자가 0이기 때문에 if문이 실행되 0이 리턴되며
반대방향으로 다시 나온다 생각하시면됩니다.
8.
6번의 studyFn(1- 1) + 10 에 값이 이제
0 + 10입니다 그럼 10이 반환되는 겁니다.
9.
5번의 (studyFn(2- 1) + 10)이 이제
10 + 10 입니다
20을 반환합니다.
10.
30을 반환합니다
11.
40을 반환합니다.
12.
함수 밖입니다.
40을 출력합니다.
끝입니다.
이해 되셨나요?
이해가 안되신다면
잠수부가 잠수 한뒤 다시 물밖으로 나오는 상상을 해보신다면 도움이 되실겁니다.
재귀 관련된 문제 풀이를 올릴 계획입니다. 문제를 풀어보시고 재귀를 습득하시길 바랍니다.~
마지막으로 재귀의 정의를 읽고 마치겠습니다.
재귀(recursion)은 어떠한 것을 정의를 할 때 자기 자신을 참조하는 것을 말합니다.
오늘도 즐거운 코딩하시길 바랍니다 ~ :)
참조 및 인용
본인 머리 및
예전에 배운 C++ Primer
재귀 정의
'C++ > C++ 알고리즘' 카테고리의 다른 글
| 백준 2953번 나는 요리사다 C++로 간단하게 풀기 (1) | 2021.07.01 |
|---|---|
| 백준1914번 하노이 탑(Hanoi tower) C++로 구현해보기 (1) | 2021.06.20 |
| 백준 2407번 nCr 조합 찾기 (1) | 2021.06.20 |
| C++과 테일러 급수로 sin(x), cos(x), e^x 값 계산해보기 (1) | 2021.06.19 |
| 등차수열의 합을 C++ 프로그래밍 하는 3가지 방법 (1) | 2021.06.19 |