java不用循環語句和if語句還有三元運算符實現累加功能

今天看博客的時候遇到一道很有意思的題目,這裏和大家分享一下,希望大家能感興趣,同時也給自己做一個記錄。

問題描述:不讓用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

如果你有什麼別的好方法,歡迎交流分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章