Daily/TIL(Today I Leared)

🍒What I did today(오늘 한 일)

Judaeng 2021. 2. 10. 22:12

✅재귀함수

어떤 문제를 해결할 때, 구조는 동일하지만 더 작은 경우를 해결함으로써 그 문제를 해결하는 방법을 '재귀'라고 한다.

재귀는 자기 자신을 호출하는 함수이다. 오늘 처음 공부했는데 어떤식으로 자기를 호출한다는거지? 어리둥절했다.

그런데 오늘 문제를 풀어보니까 '더 작은 문제로 쪼갠다' 는 것이 무슨 의미인지 알았다. 그래도 아직 재귀함수랑은 익숙하지않아서 더 풀어보고, 복습해야될 것 같다.

base case랑 recursive case로 나눠서 생각하는 방법을 더 배워야겠다.

팩토리얼로 이해하는 재귀함수

function fac(n) {
//base case
	if(n === 1){
	return 1;
 	}
    return n * fac(n-1);
}
// fac(n-1) n의 값이 5면 => f(4)
// n의 값이 4면 => f(3)
// 표현을 하자면 5 x 4 x 3 x 2 x 1
// 5x4! , 5x4x3! 이런식으로도 가능하다.

 

🍒Remember(기억할 것)


✅Memoization(메모이제이션)

메모이제이션은 결과를 메모리에 저장해둬서 다음에 같은 결과가 나올 때 저장된 결과를 재사용해 빠르게 실행하는 기법이다.

말 그대로 결과를 '메모'해두는 것이다.

JavaScript에서도 클로저 개념을 이용하면 메모리제이션을 구현할 수 있다.

반복해서 실행되는 콜백함수가 외부에 있는 저장 공간에 접근할 수 있도록 만들면 된다.

수가 실행될 때마다 결과를 저장하는 공간을 객체형태로 만들어두고, 함수가 실행될 때마다 이미 저장된 값이 아니면 그 값을 객체에 추가하게 함으로써 메모리제이션을 코드로 작성해보았다.

 

🍒More Study


✅재귀 함수 활용 및 복습

✅재귀 함수 응용

combination recursion, Tower of Hanoi 검색

 

 

2021-02-10


오늘은 재귀함수를 이해하고 푸는 방법을 배웠다. 생각보다 어리둥절(?) 했다는 표현을 쓰고 싶다. 

생각보다 많이 어렵지는 않았지만 이해하기엔 조금 어려웠다.😏

그래도 계속 배우고 사용하다보면 친해지겠지.. 약간 규칙같이 자주 사용한다고 하니까 많이 친해져야될 것 같다.

그리고 오늘 스터디 그룹을 들어갔다. 그 분들과 알고리즘 스터디 말고도 다른 공부 부분도 공유하면서 공부를 잘 이어나갔으면 좋겠다. 🖍