본문 바로가기
Algorithm

재귀(recursion)

by 진득한진드기 2022. 9. 29.

재귀란 자기 자신을 정의하면서 자기 자신을 재참조하는 방법을 의미한다.

 

ex) 1부터 num까지의 합을 구하는 재귀함수

#include<iostream>
#include<algorithm>

using namespace std;

int sum(int num){
	if(num == 0) {
    	return 0;
    }
    return num + sum(num-1);
}

 

위에서 보는 것처럼 재귀함수는 자기 자신을 호출하면서 계속해서 반복된다.

 

재귀함수로 표현할 수 있는것들은 반복문으로 모두 표현이 가능하다.

 

그렇다면 왜 재귀함수를 쓰는것일까?

 

- 재귀함수는 반복문의 비해서 가독성이 좋다.

- 변수의 사용이 줄어든다.

 

다른 장점도 있겠지만 내가 생각하는 장점은 가독성이 좋아서 사용하는 것 같다.

 

코드는 짜는 사람뿐만이 아니라 나중에 유지보수하는 다른 사용자도 보게되는데 반복문을 사용한 코드보다 가독성이 높은 재귀함수를 사용하여 다른 사용자의 생산성을 높일 수 있다고 생각한다.

 

하지만 재귀함수는 호출이 되면 프로세스 스택에 할당되는데 너무 많은 양의 호출이 들어오면 스택 오버플로우가 일어날 수 있기 때문에

신중하게 사용해야한다. 

그리고 확실히 반복문보다는 속도가 좀 느린 것 같다 ㅋ..ㅎ

 

 

재귀의 대한 나의 생각 

 

재귀는 굳이 필요없다고 하시는분들도 있는데 사용하는 의미보다 재귀를 잘사용하면 프로그래밍적 사고능력을 좀 더 높일 수 있을것 같아서 재귀 함수를 사용하면서 사고의 폭을 조금 넓히고 싶다.

 

알고리즘 테스트 사이트에서 재귀함수 부분을 보고 많이 막히기도 했고 많이 자책도 했지만 계속해서 풀면서 도전해야겠다.

 

마지막으로 백준온라인저지에서 재귀 기초 파트문제 연습하러 가야겠다ㅎ

https://www.acmicpc.net/step/19

 

재귀 단계

피보나치 수 역시 단순 for문으로도 구할 수 있지만, 학습을 위해 재귀를 써 봅시다.

www.acmicpc.net

 

 

'Algorithm' 카테고리의 다른 글

백준 15649 N과 M  (1) 2022.12.22
백준 2292 벌집  (0) 2022.11.19
특정 거리의 도시 찾기(백준 18352)  (0) 2022.11.01
[C언어] 중복제거한 배열 출력  (0) 2022.10.21
박스포장  (1) 2022.09.30