使用递归 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 浏览量

启动你的 职业

完成课程以获得证书

开始
广告