问题:
数字根是数字中所有数字的递归和。给定n,取n的数字之和。如果该值有两位数,则以这种方式继续减少,直到产生一位数字。这仅适用于自然数。
example:
digital_root(16)
=> 1 + 6
=> 7
这是一个编码的函数:
function digital_root(n) {
if (n < 10) {
return n;
}
return digital_root( n.toString().split('').reduce( function (a, b) {
return a + +b;
}, 0));
}
有人可以澄清额外的+
在这行代码中做了些什么吗? return a + +b;
答案 0 :(得分:0)
它可能是将字符串转换为整数的偷偷摸摸的方式。您不会说这是什么语言,但许多动态语言允许变量为任何类型而不声明,并使用^ Start of line
( ) group 1
.*? any number of character, reluctant match
(match at least as possible)
\[ follow by open square bracket
.*? any number of char, reluctant match
\] follow by closing square bracket
(.*) group 2, of any number of character
$ till the end
进行加法和字符串连接,并在字符串和数字之间进行隐式转换。这样的语言很容易意外地得到错误的东西(当您打算添加时连接,反之亦然)。
但是,使用一元^([^\[]*)\[[^\]]*\](.*)$
(通常)是一个数字标识,它将其参数转换为一个数字(如果它碰巧是一个字符串 - 如果参数已经是一个数字,它什么都不做) 。那么二进制+
将是添加而不是连接。