記錄一次筆試題

題目: 求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.

目前本人能想到幾種方法,歡迎各位大神留言,說出各位心目中最優的方法。 java


轉載請註明出處,喜歡的朋友能夠關注公衆號,感謝你們的支持!!!spa

  • 聯繫方式:4272231@163.com
相關文章
相關標籤/搜索