求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
本來一道非常簡單的題,由於限制很多,所以不能從一般的思路思考了。
方法一:利用遞歸以及&&的短路原理
var sumNums = function(n) {
return n && sumNums(n-1) + n;
};
方法二:數組索引相加
reduce
本質上還是循環,嚴格來說不符合題意
var sumNums2 = function(n) {
let arr = new Array(n);
arr.fill(0);
let sum = arr.reduce(function(cal,cur,index){
return cal + index;
},n);
return sum;
// 一行代碼解決
// return new Array(n).fill(0).reduce((sum,c,index)=>sum+index,n);
};
方法三:冪運算加移位
var sumNums3 = function (n) {
// return (n ** 2 + n) >> 1;
return (Math.pow(n,2) + n) >>1
};
歡迎各位大神補充