javascript - Javascript,一个简单的递归函数
问题描述
我需要帮助实现递归函数。这是我第一次尝试在我们新手首先学习的标准“阶乘”之外进行递归。
我能够在控制台中得到正确的答案,但我不知道如何让我的函数识别它已经产生了正确的答案。
挑战:“编写一个算法来确定一个数字是否“快乐”。
快乐数字是由以下过程定义的数字:从任何正整数开始,将数字替换为其数字的平方和,然后重复该过程直到数字等于 1(它将保持不变),或者循环在一个不包括 1 的循环中无限循环。这个过程以 1 结束的那些数字是快乐数字。
我的尝试:
let num = 19;
let isHappy = (n) => {
let sNum = `${n}`;
let sArray = sNum.split('');
let nArray = sArray.map(el => Number(el))
let total = nArray.reduce((acc, curr) => {
return acc += curr * curr
}, 0);
if(isHappy(total) === 1) {
return true
} else {
return false
}
}
isHappy(num)
我使用了 while 循环并在执行基本案例测试时进行了不同的尝试,但没有运气。任何帮助将不胜感激。
解决方案
您可以先返回给定数字的支票(退出早期方法)并使用 a Set
for seen numbers
- 如果一个,是快乐的回报
true
, - 是之前看到的数字,然后你有一个循环,然后返回
false
, - 或返回递归调用的结果以及所有数字平方的总和。
function isHappy(value, seen = new Set) {
if (value === 1) return true;
if (seen.has(value)) return false;
seen.add(value);
return isHappy(value.toString().split('').reduce((s, d) => s + d * d, 0), seen);
}
console.log(isHappy(1));
console.log(isHappy(19));
console.log(isHappy(4));
console.log(isHappy(22));
推荐阅读
- swift - 下载图像时出现内存问题Swift5 iOS13
- python - 具有数据生成器的多输入 keras 神经网络模型
- bootstrap-4 - 为什么 Bootstrap btn 需要 width:100% 才能使引导按钮变为全宽?不应该显示:阻止;默认情况下使按钮全宽?
- c++ - CMake target_link_libraries 未链接共享库
- django - 我想在openshift上连接nginx和django
- multithreading - JMeter 防止任何用户同时在不同线程上运行
- c - 如何通过 BT 将文件从 Tizen 可穿戴设备发送到 Android 手机
- spring-boot - 如何在 kotlin 中订阅 Web 套接字端点
- oracle - 在oracle中使用多个会话时为客户生成唯一ID而不使用序列
- javascript - 如何正确地“dispatchEvent”一个“wheel”事件?