编写程序实现集合 { 5, 1, 8, 3, 7, 2, 6 } 的求和,要求:不允许用循环。

解法一

相信很多人看到这题的时候,第一反应就是递归,我也一样,下面是我写的代码(代码写得比较随意):

var sum = function (array) {
  var summary = parseInt(array.shift());

  if (array.length > 0) {
    summary += sum(array);
  }

  return summary;
};

var summary = sum([5, 1, 8, 3, 7, 2, 6]);
console.log( summary );

解法二

这种解法最简单,直接上代码吧:

eval([5, 1, 8, 3, 7, 2, 6].join('+'));

解法三

该题目并没有限制一定要使用哪门语言,所以,我们也可以钻空子,使用ES6提供的方法来写:

[5, 1, 8, 3, 7, 2, 6].reduce(function(x , y) {
  return x + y;
});

结语

其实这题深究起来还是比较复杂的,各种情况都需要考虑,如果集合很大的话,递归也不合适吧。我个人认为该题目仅限于思维探讨,每个人都有自己的特长。。。