양수 매개 변수를 갖는 persistence
함수를 완성해야 한다. 이때 이 함수는 단일 숫자가 나올 때까지 몇 번 매개 변수를 이루고 있는 숫자들을 곱해야 하는지를 리턴해야 한다.
For example:
persistence(39) === 3 // because 3*9 = 27, 2*7 = 14, 1*4=4
// and 4 has only one digit
persistence(999) === 4 // because 9*9*9 = 729, 7*2*9 = 126,
// 1*2*6 = 12, and finally 1*2 = 2
persistence(4) === 0 // because 4 is already a one-digit number
일단 매개 변수가 1자리일 때와 아닐 때의 조건을 나누었다. 1자리가 아닐 때는 각 자릿수를 곱한 것으로 조건을 나누었다.
하지만 이렇게 함수를 짠다면 매개 변수가 2자리 이상일 때 count는 무조건 1이 된다. 이런 식의 코드 진행은 내가 의도한 대로 매개변수가 조건을 거치지만
재귀함수가 실행될 때마다 count 값이 초기화된다는 것이다.
function persistence(num) {
let count = 0;
let result = num.toString().split("").reduce((a,b)=>a*b);
if( num < 10 ) {
return count;
}
else if ( result >= 10 ) {
count ++
return persistence(result)
}
else {
count ++
return count;
}
}
count의 값이 초기화되는 것을 막기 위해서 함수 안에서 while 문을 사용했다.
function persistence(num) {
let count = 0;
while (num >= 10) {
num = num.toString().split("").reduce((a,b)=>a*b,1);
count ++;
}
return count;
}
function persistence(num) {
var times = 0;
num = num.toString();
while (num.length > 1) {
times++;
num = num.split('').map(Number).reduce((a, b) => a * b).toString();
}
return times;
}
const persistence = num => {
return `${num}`.length > 1
? 1 + persistence(`${num}`.split('').reduce((a, b) => a * +b))
: 0;
}