题目: 求1+2+3+4+。。。+ n,要求不能使用乘除法、for、while、 if、else、switch、case等关键字以及条件判断语句。
方法一:
public static int add(int n) {
return n == 1 ? 1: n + add(n-1);
}
public static void main(String[] args) {
int n = 100, sum = 0;
sum += add(n);
System.out.println(sum);
}
方法二
public static int add2(int n) {
int sum = n;
boolean flag = (sum > 0) && ((sum += add2(n -1)) > 0);
return sum;
}
public static void main(String[] args) {
int n = 100, sum = 0;
sum += add2(n);
System.out.println(sum);
}
方法三
public static int add3(int n) {
return (int)(Math.pow(n, 2) + n)>>1;
}
public static void main(String[] args) {
int n = 100;
System.out.println(add3(n));
}
总结
- 方法一一般最容易想到,直接用递归的方法,但是效率不高,容易出现java.lang.StackOverflowError。
- 方法二运用逻辑判断的方式,不容易想到,原理是当n=0的时候,前边条件为false发生短路。
- 方法三属于公式法推导法,根据题目可推到出是一个等差数列求和的公式,为:n*(n+1)/2=(n^2+n)/2.
目前本人能想到几种方法,欢迎各位大神留言,说出各位心目中最优的方法。
转载请注明出处,喜欢的朋友可以关注公众号,感谢大家的支持!!!
- 联系方式:4272231@163.com