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