재귀함수는 자신의 함수 안에서 다시 자신의 함수로 들어가는 개념이다.
이렇게 말로만 설명하면, 굉장히 헷갈리니 코드를 통해 이해해 보자.
#재귀함수 코드
1
2
3
4
5
6
7
8
9
10
11
|
#include <iostream>
void rec(int n){
if(n>5) return;
std::cout << " n = " << n << std::endl;
rec(n+1);
}
int main(){
rec(1);
}
|
cs |
이 코드는 rec함수에 들어간 변수 n의 값은 출력한다.
n = 1부터 n=5까지 출력하게 된다.
main함수에 1을 넣었는데 5까지 출력되는 이유는, rec함수 안에 또 rec함수가 있기 때문이다.
코드를 통해서도 이해하기 어려울 수 있으니, 그림으로 이해해보자.
rec()함수 안에 rec(n+1)이라는 코드 때문에
n=1이 출력된 후, 함수가 끝나지 못하고 rec함수가 그 안에 만들어지고,
n=2이 출력된 후, 함수가 끝나지 못하고 rec함수가 그 안에 만들어지고,
n=3이 출력된 후, 함수가 끝나지 못하고 rec함수가 그 안에 만들어지고,
n=4이 출력된 후, 함수가 끝나지 못하고 rec함수가 그 안에 만들어지고,
n=5이 출력된 후, 함수가 끝나지 못하고 rec함수가 그 안에 만들어지고,
n=6이 출력된 후,
rec(6)인 함수는 함수의 마지막 줄까지 실행되었기 때문에, rec(6) 함수는 끝나게 된다.
그다음 차례대로,
rec(5)도 마지막 줄까지 실행되었기에 끝나게 되고,
마찬가지로, rec(4), rec(3), rec(2), rec(1)까지 모두 끝나게 된다.
.
.
.
이런 식으로 재귀함수가 있는 함수가 실행된다.
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <iostream>
void rec(int n){
if(n>5) return;
std::cout << " n = " << n << std::endl;
return rec(n+1);
}
int main(){
rec(1);
}
|
cs |
이 코드도 위 코드와 동일하게 출력 되는데, 이 코드는 함수 안에 함수가 만들어 지는 것이 아니라,
return을 사용하였기 때문에, 함수에서 나간 후, 동일한 함수로 다시 이동하는 코드이다.
#재귀함수 활용 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//팩토리얼
#include<iostream>
int fac(int n){
if (n == 1) return 1;
return n*fac(n-1);
}
int main(){
using namespace std;
int what, result;
std::cin >> what;
result = fac(what);
cout << result <<endl;
}
|
cs |
팩토리얼을 계산하는 코드이다.
이 코드에도 재귀함수를 활용하여 작성되었다.
출처(source) - 유튜브 두들낙서님
https://www.youtube.com/c/%EB%91%90%EB%93%A4%EB%82%99%EC%84%9C
c++ 최고의 강좌,,
'공부 > c++' 카테고리의 다른 글
#10 배열을 매개변수로 넘기기 문제 | 띄어쓰기없이 출력하기 (0) | 2021.09.20 |
---|---|
#9 배열을 매개변수로 넘기기 | c++ (0) | 2021.08.26 |
#7 prototype | 프로토타입 (0) | 2021.08.26 |
#6 call-by-value | call-by-reference (0) | 2021.08.26 |
#5 void함수에서 return을 사용하는 방법 (0) | 2021.08.26 |