🍒What I did today(오늘 한 일)
✅재귀함수
어떤 문제를 해결할 때, 구조는 동일하지만 더 작은 경우를 해결함으로써 그 문제를 해결하는 방법을 '재귀'라고 한다.
재귀는 자기 자신을 호출하는 함수이다. 오늘 처음 공부했는데 어떤식으로 자기를 호출한다는거지? 어리둥절했다.
그런데 오늘 문제를 풀어보니까 '더 작은 문제로 쪼갠다' 는 것이 무슨 의미인지 알았다. 그래도 아직 재귀함수랑은 익숙하지않아서 더 풀어보고, 복습해야될 것 같다.
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
오늘은 재귀함수를 이해하고 푸는 방법을 배웠다. 생각보다 어리둥절(?) 했다는 표현을 쓰고 싶다.
생각보다 많이 어렵지는 않았지만 이해하기엔 조금 어려웠다.😏
그래도 계속 배우고 사용하다보면 친해지겠지.. 약간 규칙같이 자주 사용한다고 하니까 많이 친해져야될 것 같다.
그리고 오늘 스터디 그룹을 들어갔다. 그 분들과 알고리즘 스터디 말고도 다른 공부 부분도 공유하면서 공부를 잘 이어나갔으면 좋겠다. 🖍