File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 面试题 64. 求 1+2+…+n
2
+
3
+ 难度 ` middle `
4
+
5
+ 求 ` 1+2+...+n ` ,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句(A?B: C )。
6
+
7
+ ## 示例
8
+
9
+ ```
10
+ 输入: n = 3
11
+ 输出: 6
12
+ -------
13
+ 输入: n = 9
14
+ 输出: 45
15
+ ```
16
+
17
+ ## 解题思路
18
+
19
+ 如果忽略题目限制。
20
+
21
+ 高中学过等差数列的求和公式 S = (1+n)* n / 2;
22
+
23
+ 可以很快的写出代码:
24
+
25
+ ``` javascript
26
+ var sum = function (n ) {
27
+ return (1 + n)* n/ 2 ;
28
+ }
29
+ ```
30
+
31
+ 题目也不让用循环,考虑使用递归,也是一行代码。
32
+
33
+ ``` javascript
34
+ var sumNums = function (n ) {
35
+ return n == 0 ? 0 : n + sumNums (n- 1 );
36
+ };
37
+ ```
38
+
39
+ 但是题目限制了不让使用三目运算符,可以考虑使用 「与」 ` && ` 操作。「与」操作有个就近原则,例如 A && B,如果 A 为 false,那么整个表达式就位 false,如果 A 为 true,则再看 B 的真值。
40
+
41
+ 因此,可以将上面的递归代码改写成下面这个样子:
42
+
43
+ ``` javascript
44
+ var sumNums = function (n ) {
45
+ n && (n += sumNums (n- 1 ));
46
+ return n;
47
+ }
48
+ ```
49
+
50
+ 完事,这题考察递归以及逻辑运算,以后遇到类似的限制题目,可以往这方面想。
You can’t perform that action at this time.
0 commit comments