使用遞迴 JavaScript 來確定快樂數


快樂數

快樂數是指最終能變為 1 的數,而在這個過程中,如果有任何一個數重複出現,那麼這個迴圈將無限地進行下去,這樣的數被稱為不快樂數。

例如 − 13 是一個快樂數,因為:

1^2 + 3^2 = 10 and,
1^2 + 0^2 = 1

另一方面,36 是一個不快樂數

我們需要編寫一個使用遞迴來確定一個數是否為快樂數的函式。

因此,讓我們寫出這個函式。這個函式的要點是,我們必須記錄已經出現的數字,如果同一個數字再次出現,我們返回 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

更新於: 20-8-2020

682 瀏覽量

啟動你的 職業

完成課程以獲得證書

開始
廣告
© . All rights reserved.