今天看博客的時候遇到一道很有意思的題目,這裏和大家分享一下,希望大家能感興趣,同時也給自己做一個記錄。
問題描述:不讓用for語句、while語句、if語句以及三元運算符(?:)實現1+2+3+……+n
這是一個典型的求等差數列前n項和的問題,如果沒有題目的限制條件其實很簡單。根據題目的限制,很容易就想到應該用遞歸進行實現。但是題目的限制不能使用if語句和三元運算符,這就給遞歸的結束造成了困難。這裏大家可以想想應該如何實現。
根據提示,想到了任何一門語言都涉及的一個知識點:短路。短路就是在一個較長的與或表達式中,前面的boolean表達式的值爲true或者false的時候,後面的表達式就不會執行。基於此,我們就知道該如何編程實現了,其java代碼如下:
public class Solution {
public static void main(String[] args) {
System.out.println("Result:" + superposition(100));
}
/**
* 功能:計算以1爲首項,公差爲1的等差數列的前n項和
* 1+2+3+4+……+n
* 要求:不能用for、while、if以及三元運算符(?:)
*/
public static int superposition(int n) {
int result = n;
//當n=0時,(n!=0)爲false,導致後面的(result+=superposition(n-1))不會再執行,達到結束程序的目的
boolean temp = (n != 0) && true && (Boolean.valueOf((result += superposition(n - 1)) + ""));
return result;
}
}
============
Result:5050
如果你有什麼別的好方法,歡迎交流分享。