Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การกำหนด Happy Number ด้วย Recursion ใน JavaScript

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