剑指 Offer 64. 求1+2+…+n(面试题中的短路与&&)
题目:
求 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; } }