# 题目描述

1 + 2 + ... + n , 要求 不能使用 乘除法, for, while, if, else, switch, case 等关键字及条件判断语句 (A ? B : C)

示例 1:

输入: n = 3
输出: 6
1
2

示例 2:

输入: n = 9
输出: 45
1
2

限制:

1 <= n <= 10000
1

来源: 力扣 (LeetCode) (opens new window)

# 解题思路 or 实现原理

我们小学就学过 1 + 2 + ... + n 的结果就是 $ sum = \frac{(1 + n) * n}{2} $, 但是由于题目限定, 我们不能使用常规方法, 所以我们可以通过 短路递归幂运算移位 来计算出结果。

# 实现代码

/*
 * @Author: Rainy
 * @Date: 2019-11-14 19:25:01
 * @LastEditors: Rainy
 * @LastEditTime: 2020-07-28 15:42:46
 */

/**
 * @param {number} n
 * @return {number}
 */
export function sumNums_1(n: number): number {
  return n && (n + sumNums_1(--n));
};

export function sumNums_2(n: number): number {
  // (n + 1) * n / 2 => (n ^ 2 + n) / 2
  return (n ** 2 + n) >> 1;
};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20