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