Today’s Key 🔑
- 너무 좋은 페어님을 만난 것 같았다. (반복을 줄이고 반복문을 되도록 쓰지 않기 위해서 재귀를 쓴다는 점 다시 인식했다! 페어님 진짜 감사합니다!)
- 재귀함수 관련 10개의 코플릿 basic 문제 풀이 (밑에 정리 예정)
- recursion.js 과제 두 문제를 풀고 페어님과 서로 코드를 비교했다.
- 이전까지 제출했던 과제들을 정리하기 시작했다.
추가로 공부하자 🔥
- rest operator 에 대해서
- recursion 과제의 클래스네임 함수를 구현하는 것에 있어서 한 동기가 forEach.call() 형태로 풀었다. 그 부분의 코드를 분석해보고 싶다.
자꾸자꾸 보고 적고 직접 치면서 늘어나는 javascript 상식! (으쌰!) 🚀
고민을 요했던 재귀 함수 관련 코플릿 문제를 몇 가지 정리하고자 한다. 같이 문제를 풀었던 페어님의 미친 실력이 동반했다. (감사합니다.)
코플릿 재귀 문제 정리 01. 숫자와 배열이 주어지는 함수에서 숫자 만큼의 배열 인덱스 앞에 부분을 저장하라.
- arr의 앞에서 num으로 들어오는 숫자 만큼 저장해야 한다.
- 재귀를 무조건 사용해야 한다.
function take(num, arr) {
// num이 0이면 arr의 아무것도 저장할 수 없다.
// 배열의 길이가 0이면 아무것도 저장할 수 없다.
// num이 배열의 길이보다 크거나 같으면 배열 자체를 뱉어라.
if (num === 0 || arr.length === 0) {
return [];
} else if (num >= arr.length) {
return arr
}
// 모든 조건이 아니면 배열의 맨 뒷요소는 pop()
arr.pop()
// 그리고 반복적으로 검증하기 위해서 다시 순환 > 재귀!
return take(num, arr)
// arr의 길이를 점점 줄여가고, 배열의 요소를 없앤다.
// 반복하여 순환하다가 배열의 길이와 num이 같아지는 순간!
// return arr!
}
코플릿 재귀 문제 정리 01. true, false 로 주어지는 배열의 논리곱을 만들어라!
- 배열에 false 가 하나만 있어도 return false!
- 모든 배열 요소가 true 라면 true!
- 모든 배열 요소가 false 라면 false!
- 이 문제의 경우 나는 while문을 사용했는데, 생각해보니 반복문 없이 해결 할 수 있었다.
function and(arr) {
// 빈 배열은 true
if (arr.length === 0) {
return true;
} else if (arr[0] === false) {
// 하나라도 false 면 그냥 false;
return false;
}
// 첫 인자가 true라면! 재귀로 다음 요소부터 체크
// 모두 true가 들어서 배열의 길이가 0이 된다면 > true!
return and(arr.slice(1))
}