一个快乐的数字是一个最终达到 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