เลขแห่งความสุข
จำนวนที่มีความสุขคือตัวเลขที่ในที่สุดก็ถึง 1 เมื่อแทนที่ด้วยผลรวมของกำลังสองของแต่ละหลัก ขณะที่ในระหว่างกระบวนการนี้ ตัวเลขใด ๆ ที่ซ้ำกัน วัฏจักรจะทำงานอย่างไม่สิ้นสุด และตัวเลขดังกล่าวจะเรียกว่าตัวเลขที่ไม่มีความสุข
ตัวอย่างเช่น − 13 เป็นตัวเลขที่มีความสุขเพราะ
1^2 + 3^2 = 10 and, 1^2 + 0^2 = 1
ในทางกลับกัน 36 เป็นตัวเลขที่ไม่มีความสุข
เราจำเป็นต้องเขียนฟังก์ชันที่ใช้การเรียกซ้ำเพื่อกำหนดว่าตัวเลขนั้นเป็นตัวเลขที่มีความสุขหรือไม่
ลองเขียนฟังก์ชันนี้ออกมา กุญแจสำคัญของฟังก์ชันนี้คือเราจะต้องเก็บบันทึกตัวเลขที่ปรากฎแล้ว ถ้าตัวเลขเดิมปรากฏอีก กลายเป็นเท็จ ถ้าตัวเลขยกกำลังสองรวมกันได้ 1 เราจะคืนค่าเป็นจริง
เราจะใช้วัตถุเพื่อติดตามจำนวนที่ปรากฏขึ้นแล้ว เราอาจใช้ setor 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