【劍指Offer】47、求1+2+3+4+···+n


  題目描述:

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

  解題思路:

  本題本身沒有太多的實際意義,但是可以對程序員的發散思維能力進行考察,進而可以反映出對編程相關技術理解的深度。

  對於本題,書中給出了利用構造函數、虛函數、函數指針、模板類型求解等思路,在這里,若使用java實現,有些方法卻是不適用的,比如構造函數法,java構造對象數組並不會多次調用構造函數,其他方法略顯復雜,這里我們給出另外一個思路:

  可以通過遞歸來實現加法,但是由於無法使用if語句,因此對於遞歸的結束條件無法進行判斷,這里用一個比較巧妙的思路:與運算的短路特性,所謂短路,比如 A && B,當A條件不成立時,不論B是否成立,結果都是false,所以B不再進行計算,利用短路特性可以實現遞歸停止,進而求出和。

  編程實現(Java):

public int Sum_Solution(int n) {
        /*
        等差數列求和:S=n(n+1)/2  無法使用
        1.需利用邏輯與的短路特性實現遞歸終止。 
        2.當n==0時,(n>0)&&((sum+=Sum_Solution(n-1))>0)只執行前面的判斷,為false,然后直接返回0;
	    3.當n>0時,執行sum+=Sum_Solution(n-1),實現遞歸計算Sum_Solution(n)。
        */
        int sum=n;
        boolean ans = (n>0) && ((sum+=Sum_Solution(n-1))>0);
        return sum;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM