javascript - 将数字总和递归减少到一位数字
问题描述
我正在尝试解决代码信号上的挑战(数字度数),其中的任务是找到我们需要用它的数字之和替换这个数字的次数,直到我们得到一个数字。即传入的数字是5,它已经是一个数字,所以结果应该是0。如果数字是100,它的数字之和是1,这是一个数字,所以结果应该是1,依此类推......
我正在做一个这样的递归解决方案:
let count = 0;
function digitDegree(n) {
if (n < 10) {
console.log(count);
return count;
};
const arr = n.toString().split('').map(Number);
const sumOfDigits = arr.reduce((acc, curr) => acc + curr);
count++;
digitDegree(sumOfDigits);
}
在第二个循环中,即使控制台日志显示正确的值,我也会得到 null 作为输出。它哪里出错了?
我看到这个问题之前已经提出了,但答案是相当数学的。这种方法可以吗,还是会被认为是不好的做法?
解决方案
您需要一个return
语句来获取递归的结果。
return digitDegree(sumOfDigits);
更短的方法是提前删除显式转换并删除临时数组。
然后为 count 取另一个参数并省略一个全局变量。
function digitDegree(n, count = 0) {
if (n < 10) return count;
return digitDegree(
n .toString()
.split('')
.reduce((acc, curr) => acc + +curr, 0),
count + 1
);
}
console.log(digitDegree(9999));
推荐阅读
- button - 一个正方形可以有两个按钮吗?
- javascript - 有没有比较javascript中的值的方法?
- json - 如何在 scala 中获取 json 字符串的深层元素?
- c# - 是否可以使用 C# 可选参数作为变量?
- c++ - clang++ 中的 SFINAE 模板构造函数中的模棱两可推演,而不是 g++
- php - php:cli shell_exec 与 web shell_exec
- unix - 使用 awk 的条件语句未按预期工作
- sql - 在 Redshift 中“规范化”字符串的最佳方法是什么?
- python - 几分钟后python看门狗停止捕获事件
- r - 对 data.frame 值应用函数