JZ-047-求 1+2+3+...+n

雄獅虎豹發表於2022-01-12

標題

求 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));
    }
}
【每日寄語】 每個充滿希望的清晨,告訴自己努力,是為了遇見更好的自己。

相關文章