본문 바로가기
공부/c++

#8 재귀함수 | recursion | 팩토리얼 | c++

by 심심한 뾰 2021. 8. 26.
반응형

재귀함수는 자신의 함수 안에서 다시 자신의 함수로 들어가는 개념이다.

이렇게 말로만 설명하면, 굉장히 헷갈리니 코드를 통해 이해해 보자.

 

#재귀함수 코드

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
void rec(int n){
  if(n>5return;
  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>5return;
  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 == 1return 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++ 강좌를 올리고 있고 다른 컨텐츠는 할 수도 있고 안 할 수도 있는 채널. ▶ 두들낙서 지식공유 서버 참가하기: https://discord.gg/y4SXcjU

www.youtube.com

c++ 최고의 강좌,,

반응형