题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路
- 首先没了上面那些关键字你会发现,你不能循环了,所以你得想办法循环,书上给的是构造函数,但是java默认构造函数不初始化,除非你手动,所以说就不行了
- 没有if,你会发现递归的条件不能控制了,和for,while一样,其实我们失去的就是控制边界;那么想法就是如何让程序顺利退出;
3.下面说三种方法,异常,&&短路运算符,次方运算
static public int Sum_Solution1(int n) {
try {
int i=1%n; //递归到底,就会抛出异常
return n+Sum_Solution(n-1);
}catch (Exception e)
{
return 0;
}
}
//短路运算符,先算前面
static public int Sum_Solution(int n){
int i = n;
boolean flag = (n>0) && (n+=Sum_Solution(n-1))>0;
return n;
}
//这个其实是公式(n*(n+1)/2)==(n*n+n)/2;不过左移运算符本来就是除法,所以。。。。。
static public int Sum_Solution2(int n)
{
return (int)(Math.pow(n,2)+n)>>1;
}
收获
- 眼界大开啊,各种奇怪的想法;