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

猜你喜欢