return을 본인으로 하여 재귀함수가 되지만 신선한건 재귀값들을 배열로 만들었다는 점이다.
a와 b가 같아질때까지 계속 재귀함수가 실행되고 return []안에는 min값이 계속쌓이고 마지막 a === b같아지는 순간에는 [a]가 리턴되는데 이 값은 ...으로 destructuring되어 맨처음 시작했던 함수에서 최종적으로 모든 min값이 return되는 정말 재밌고 신기한 구조쓰
Snail
link 인자로는 배열을 받는데 nxn 의 정사각형의 각각 숫자를 배열로 받는다. 배열안에 배열로 구성되어 있다.
function sqInRect(a, b, initial = true){
if (a === b) { return initial ? null : [a] }
const min = Math.min(a, b)
const max = Math.max(a, b)
return [min, ...sqInRect(max - min, min, false)]
}
snail = function(array) {
var result;
while (array.length) {
// Steal the first row.
result = (result ? result.concat(array.shift()) : array.shift());
// Steal the right items.
for (var i = 0; i < array.length; i++)
result.push(array[i].pop());
// Steal the bottom row.
result = result.concat((array.pop() || []).reverse());
// Steal the left items.
for (var i = array.length - 1; i >= 0; i--)
result.push(array[i].shift());
}
return result;
}
function divisibleByThree(str){
return [...str].reduce((s,d)=>+d+s,0)%3===0;
}