題目描述
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
/**
* 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
*/
public class _046_Sum_Solution {
// 其實只要先看我們手裏還有什麼操作就能一步一步想到利用短路特性了
// 我們手裏現在可以使用(按優先級高低)單目運算符:++和--,雙目運算符:+,-,移位運算符<<和>>,
// 關係運算符>,<等,邏輯運算符&&,||,&,|,^,賦值=
// 單目和雙目的作用是一樣的,移位顯然沒有規律性,因爲一個二進制位並不能區分某個數和其他數,
// 這也就排除了&,|,^,因爲不需要做位運算了
// 關係運算符要和if匹配,但這是不行的,這時看看剩下的運算符只能選&&,||了
// 如果做過Java筆試題,會對這兩個運算符非常敏感,
// 他們有短路特性,前面的條件判真(或者假)了,就不會再執行後面的條件了
//這時就能聯想到--n,直到等於0就能返回值。
/**
* 沒法循環,那就遞歸;
* 沒法判斷,那麼使用boolean的短路特性.
*/
public int Sum_Solution(int n) {
int sum = n;
boolean flag = (sum > 0) && ((sum += Sum_Solution(n - 1)) > 0);
return sum;
}
}