求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
解题思路
用递归的思想难免会用到判断语句, 否则程序不能停下来 那么如何不用条件判断语句, 但是又能达到相同效果呢, 使用 &&
if (n
> 1) {
n
+= sumNums(n
- 1);
}
观察这个语句
boolean b
= n
> 1 && (n
+= sumNums(n
- 1)) <= 0;
当n > 1时, (n += sumNums(n - 1)才会执行, 至于<= 0还是> 0其实无所谓, 只是为了借助布尔变量 当n == 1时, 由于"短路"会直接跳出返回n 从而实现目标从1加到n
代码
class Solution {
public int sumNums(int n
) {
boolean b
= n
> 1 && (n
+= sumNums(n
- 1)) <= 0;
return n
;
}
}