一道面试题,不用循环解循环问题

题目

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

解法一

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

1
2
3
4
5
6
7
8
9
10
11
12
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 );

解法二

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

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

解法三

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

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

结语

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