这个额外的' +'代表在这段代码?递归函数

时间:2017-04-05 01:52:53

标签: recursion

问题:

  

数字根是数字中所有数字的递归和。给定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;

1 个答案:

答案 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 进行加法和字符串连接,并在字符串和数字之间进行隐式转换。这样的语言很容易意外地得到错误的东西(当您打算添加时连接,反之亦然)。

但是,使用一元^([^\[]*)\[[^\]]*\](.*)$ (通常)是一个数字标识,它将其参数转换为一个数字(如果它碰巧是一个字符串 - 如果参数已经是一个数字,它什么都不做) 。那么二进制+将是添加而不是连接。