【发布时间】:2019-08-13 21:58:45
【问题描述】:
我想对一个整数进行递归求和:将一个整数拆分为一个数组,然后对各个项目求和,直到剩下一个整数数组。
这是我的逻辑:
- 取一个整数 (n) 并将其拆分为一个数组。
- 将所有单独的数字相加。
- 数字是否大于 9?
- 是:重复步骤 1 和 2
- 否:返回号码
- 是:重复步骤 1 和 2
function digital_root(n) {
let digits = (""+n).split("").map(Number);
while (digits.length > 1) {
let result = digits.reduce((sum, int) => sum + int);
let digits = (""+result).split("").map(Number);
}
return digits;
};
这是我的 Node.js 向我抛出的错误代码(在上面示例代码的第 4 行):
ReferenceError: digits is not defined
at digital_root (repl:6:18)
我假设变量 digits 可以在 while 循环的范围内访问,但显然,我似乎错了?有人可以在这里为我提供一些见解吗?
编辑:谢谢大家的帮助!我已经解决了这个问题。
为了您的好奇,这是我的算法背后的数学形式:
http://mathworld.wolfram.com/DigitalRoot.html
它也可以在一行中解决:
function digital_root(n) {
return (n - 1) % 9 + 1;
}
【问题讨论】:
-
这可能意味着
digits没有值。在 while 循环之前执行console.log(digits) -
该变量可以在我检查过的函数中访问。它只是在 while 循环中不可访问。
-
删除循环内的 let 。你定义了两次。
标签: javascript while-loop