【剑指offer】求1+2+...+n
求1+2+3+...+n
http://www.nowcoder.com/questionTerminal/7a0da8fc483247ff8800059e12d7caf1
题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
1、思路分析
不能用乘除法。因此不能直接套用累加公式;不能使用while、for循环,因此不能进行迭代求和;于是我们考虑递归,但跳出递归需要条件判断,如何在不使用if、case等的情况下实现条件判断呢?答案是使用与运算,根据与运算的短路性质,如果第一个表达式为假,就不会计算后面所有表达式的值,我们只需要将递归跳出条件放在第一个表达式,满足后执行的操作放在第二个表达式即可。需要注意的是&&两边均要为逻辑表达式。
2、代码
public class Solution { public int Sum_Solution(int n) { int ans = n; boolean flag = (ans > 0) && ((ans += Sum_Solution(n-1)) > 0); return ans; } }