求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
是不是老阔疼,想用递归,但是有for又不行,抓狂!
别慌,我们来分析分析,既然乘除用不了,那么n^2+n肯定是行不通的。再想想,除了上述方法之外,还有没有其他的好方法。
一般会想到从1往上加,但问题是边界问题,也就是什么时候截止的问题。n的界限不好确定,所以我们倒着来,以0为界限,从n往下加。
代码如下:
public class Solution {
public static void main(String[] args) {
System.out.println("请输入n的值");
Scanner s = new Scanner(System.in);//从键盘输入
int n=s.nextInt();
int r=sum(n);
System.out.print(r);
}
public static int sum(int n){
int r=0;
boolean ans=false;//如果ans为false,则执行下一步
int a=0; // 界限
ans=(n!=0)&&(a==(r=sum(n-1))); //n不为0这个为真,但是a不等于后面的,
//所以结果为假,返回r+n,继续执行,结果为假,返回n-1,实现从n一直加到0;
return r+n;
}
}
输出结果
欢迎大家留言讨论!