记录一次笔试题

·  阅读 78

题目: 求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
分类:
阅读
标签:
分类:
阅读
标签:
收藏成功!
已添加到「」, 点击更改