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