Happy Number
Happy Number คือตัวเลขที่สุดท้ายจะกลายเป็น 1 เมื่อแทนที่ด้วยผลรวมกำลังสองของแต่ละหลัก ในขณะที่ถ้าระหว่างกระบวนการมีตัวเลขซ้ำ วงจรจะรันไปเรื่อยๆ ตัวเลขแบบนี้เรียกว่า Unhappy Number
เช่น 13 เป็น Happy Number เพราะ
1² + 3² = 10 และ 1² + 0² = 1
ส่ว 36 เป็น Unhappy Number
เราต้องเขียนฟังก์ชันใช้ recursion ตรวจสอบว่าเป็น Happy Number หรือไม่
เขียนฟังก์ชันนี้ จุดสำคัญคือต้องบันทึกตัวเลขที่เคยปรากฏแล้ว ถ้าตัวเลขเดิมปรากฏอีก คืน false ถ้าผลรวมกำลังสองเป็น 1 คืน true
เราจะใช้อ็อบเจกต์บันทึกตัวเลขที่เคยปรากฏ (set หรือ Map ก็ได้ แต่อ็อบเจกต์ธรรมดาเพียงพอ)
โค้ด
ตัวอย่าง
const squareSumRecursively = (n, res = 0) => {
if(n){
return squareSumRecursively(Math.floor(n/10), res+Math.pow((n%10),2));
};
return res;
};
const isHappy = (num, map = {}) => {
if(num !== 1){
if(map[num]){
return false;
}
map[num] = 1;
return isHappy(squareSumRecursively(num), map);
};
return true;
}
console.log(isHappy(36));
console.log(isHappy(13));
console.log(isHappy(36));
console.log(isHappy(23));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น
false true false true