Develop/TIL(Today I Learned)

[2022.05.24] 자료구조/알고리즘 - 재귀

IJY 2022. 7. 25. 03:45

Section1이 끝나고 Section2가 시작되었다!

Section2부터는 매일 간단한 코딩 테스트 문제 1개를 풀기 시작하였다.

그리고 오늘은 자료구조/알고리즘에서 재귀함수에 대해 공부를 하였다.

 

Daily coding

오늘은 입력받은 배열의 첫 요소와 마지막 요소를 뽑아 이를 각각 Key와 Value로 HashMap으로 만들어 반환하는 메서드를 구현하는 문제였다.

이제 시작인 부분이기 때문에 쉬운 문제가 출제된 것 같으나.. HashMap을 초기화하는 방법을 몰라서 검색을 해봐야 했다.

검색 결과 HashMap을 초기화하는 방법은 아래와 같이 구현이 가능하다는 사실을 알았다.

new HashMap<String, String>(){
	{
		put("Key", "Value");
	}
}

 

 

처음 생각할 땐 "new HashMap<String, String>(){ "Key" : "Value", ...}" 형태로 초기화를 하는 줄 알았는데.. 위 방법으로 한다는 것을 알고선 신기했다. 중괄호 안에 중괄호를 작성하고 put() 메서드를 활용해서 초기화를 한다는 것이..

C언어를 쓸 땐 이러한 초기화 방법을 볼 수 없었기에 상상조차 하지 못 한 방법이었다.

 

재귀 함수(recursion function)

재귀 함수가 뭔지는 알고 있었으나 잘 사용을 안해봐서 어렵게 느끼고 있었던 개념이다.

재귀 함수를 간단하게 정리를 해보자면 이렇다.

함수 내에서 자기 자신을 호출하여 문제를 해결하는 함수

말 그대로 자기 자신을 계속하여 호출해서 결과를 해결할 수 있도록 만드는 함수(메서드)다.

개념을 공부한 후 페어와 함께 재귀 함수를 이용해서 푸는 문제를 풀어보며 이해도를 올렸다.

문제를 풀면서 어느정도 감을 잡았지만.. 어느정도 간단한 문제들이었기에 이해하고 풀 수 있었다고 생각이 된다.

재귀 함수에 대한 대표적인 문제 중 하나로써 팩토리얼(factorial)을 해결하는 재귀 함수 구현이 있다.

매개 변수로 받는 숫자의 팩토리얼을 구하는 재귀 함수를 구현한다면 아래와 같이 구현이 가능할 것이다.

int factorial(int num) {
	if(num == 0) return 1;
	return num * factorial(num - 1);
}

그리고 해당 재귀 동작에 대한 예로는 아래의 그림을 참고하면 된다.

factorial 재귀 동작 예시 이미지
factorial 재귀 동작 예시