標題
求 1+2+3+...+n
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
題目連結: 求 1+2+3+...+n
程式碼
/**
* 標題:求 1+2+3+...+n
* 題目描述
* 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
* 題目連結:
* https://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1?tpId=13&&tqId=11200&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
*/
public class Jz47 {
/**
* 使用遞迴解法最重要的是指定返回條件,但是本題無法直接使用 if 語句來指定返回條件。
* 條件與 && 具有短路原則,即在第一個條件語句為 false 的情況下不會去執行第二個條件語句。利用這一特性,將遞迴的返回條件取非然後作為 && 的第一個條件語句,
* 遞迴的主體轉換為第二個條件語句,那麼當遞迴的返回條件為 true 的情況下就不會執行遞迴的主體部分,遞迴返回。
* 本題的遞迴返回條件為 n <= 0,取非後就是 n > 0;遞迴的主體部分為 sum += Sum_Solution(n - 1),轉換為條件語句後就是 (sum += Sum_Solution(n - 1)) > 0。
*
* @param n
* @return
*/
public int sum_Solution(int n) {
int sum = n;
boolean b = (n > 0) && ((sum += sum_Solution(n - 1)) > 0);
return sum;
}
public static void main(String[] args) {
Jz47 jz47 = new Jz47();
System.out.println(jz47.sum_Solution(5));
System.out.println(jz47.sum_Solution(6));
System.out.println(jz47.sum_Solution(7));
System.out.println(jz47.sum_Solution(8));
}
}
【每日寄語】 每個充滿希望的清晨,告訴自己努力,是為了遇見更好的自己。