题目:
求 1+2+…+n ,要求不能使用乘除法、for
、while
、if
、else
、switch
、case
等关键字及条件判断语句(A?B:C)
。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
题解:
不能用循环,那首先就应当考虑递归。
一般来说,在编写递归程序时,得用 if 来判断当前是否满足递归的结束条件,如果满足应当结束递归,并逐层返回。
但题目又不让用 if 。这里我们可以利用 && 的短路特性,来代替 if 做判断。
为了方便理解最后的代码,这里先给出包含 if 的递归代码:
class Solution {
public int sumNums(int n) {
if(n == 0) return 0;
n += sumNums(n - 1);
return n;
}
}
&& 的短路特性
- A && B
- A 为 true,则返回表达式 B 的 bool 值
- A 为 false,则返回 false
下面就是使用 && 代替 if 的代码。
class Solution {
public int sumNums(int n) {
boolean flag = n > 0 && (n += sumNums(n - 1)) > 0;
return n;
}
}