1. 程式人生 > >劍指Offer--求1+2+3+...+n

劍指Offer--求1+2+3+...+n

題目描述

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

先上程式碼:

public class Solution {
    public int Sum_Solution(int n) {
        int ans=n;
        boolean b=(ans!=0) && ((ans+=Sum_Solution(n-1))!=0);
        return ans;
    }
}

解題思路:

看到這道題我首先想到的是等差數列求和的公式,可是題目上不能採用乘除法。想一想其他的方法基本上都要進行最後n的判斷來結束加法。最後在看了評論區的解法後才明白該怎麼做。

這道題採用的是遞迴的解法,我們知道遞迴解法最後是需要一個結束條件的,如果沒有結束條件的話,會一直遞迴下去,那麼我們這道題也就無解了。仔細觀察下面的式子:

boolean b=(ans!=0) && ((ans+=Sum_Solution(n-1))!=0);

其實遞迴的結束條件就包含在這個裡面。&&是邏輯與,邏輯與有個短路特點,如果前面為假的話,後面的就不會進行計算了(這裡在程式設計的時候我們也可以利用這種特點來減少運算),所以當遞迴到n=0的時候,就不會再繼續往下進行遞迴了。