题目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
如果不加限制这个题目就是小学生的难度,但是现在有限制条件应该就要开动脑筋了,肯定要用到位运算。
解题思路:
1.需利用逻辑与的短路特性实现递归终止。2.当n==0时,(n>0)&&((sum+=Sum_Solution(n-1))>0)只执行前面的判断,为false,然后直接返回0;
3.当n>0时,执行sum+=Sum_Solution(n-1),实现递归计算Sum_Solution(n)。
public
int Sum_Solution(int
n) {
int
sum = n;
boolean
ans =
(n>0)&&((sum+=Sum_Solution(n-1))>0);
return
sum;
}
还有一个不容易想到的,其实就是利用公式n*(n+1)/2,
public int Sum_Solution(int n) {
int sum =
(int) (Math.pow(n,2) + n);
return
sum>>1;//相当于除以2
}
在看一题
题目描述