진행중인 문제에 이어서 푸는 중이다.
어제 생각했던 풀이로 해봤다.
function smallestCommons(arr) {
let sortedArr = arr.sort((a, b) => a - b);
let result = sortedArr[0]
for (let i = sortedArr[0] + 1; i <= sortedArr[1]; i++) {
result = addRecursion(result, i);
}
return result;
}
function addRecursion(num1, num2) {
let resultNum = 0;
const searchCommonNumber = (n1, n2) => {
if (n1 === n2) {
return n1;
} else if (n1 < n2) {
resultNum = n1;
resultNum += num1;
return searchCommonNumber(resultNum, n2);
} else if (n1 > n2) {
resultNum = n2;
resultNum += num2;
return searchCommonNumber(n1, resultNum);
}
}
return searchCommonNumber(num1, num2);
}
총 통과해야하는 단계가 6개가 있는데 그 중에 4개를 통과했다. 나머지 2개는 call stack이 초과해서 문제를 통과하지 못했다. 왜 call stack이 초과하냐면 첫 조건이 재귀함수 종료 조건인데 종료조건이 될 때까지 함수가 실행되고 그 과정에서 실행되는 함수가 너무 많아서 call stack이 초과한다.
call stack이 초과되지 않는 방법을 생각해 내야겠다.