求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。code
示例 1: 輸入: n = 3 輸出: 6
示例 2: 輸入: n = 9 輸出: 45
限制:1 <= n <= 10000
遞歸
解題思路:it
1.遞歸io
/** * @param {number} n * @return {number} */ var sumNums = function(n) { let sum = n; return n > 0 && (sum += sumNums(n - 1)) };
2.移位運算符console
解題代碼:function
/** * @param {number} n * @return {number} */ var sumNums = function(n) { return (Math.pow(n, 2) + n) >> 1 };
JS移位運算符補充:class
「<<」運算符執行左移位運算。在移位運算過程當中,符號位始終保持不變。若是右側空出位置,則自動填充爲 0;超出 32 位的值,則自動丟棄。移動
把數字 5 向左移動 2 位,則返回值爲 20。
「>>」運算符執行有符號右移位運算。與左移運算操做相反,它把 32 位數字中的全部有效位總體右移,再使用符號位的值填充空位。移動過程當中超出的值將被丟棄。while
把數值 1000 向右移 8 位,則返回值爲 3。
「>>>」運算符執行五符號右移位運算。它把無符號的 32 位整數全部數位總體右移。對於無符號數或正數右移運算,無符號右移與有符號右移運算的結果是相同的。co
下面兩行表達式的返回值是相同的。
console.log(1000 >>> 8); //返回值3 console.log(1000 >> 8); //返回值3