累和真的是你想的這么簡單嗎

來自面試官的拷問
圖片.png

結(jié)果
圖片.png

到底是我的a,b和他的m,n不對應(yīng)還是我沒有進(jìn)行非法判斷呢?后來我想了下都不是,這題應(yīng)該考的效率,于是:

import org.junit.Test;

import java.util.Date;

public class TestSum {

    //普通for循環(huán)累和
    public int sum1(int m, int n){
        int sum=0;
        for (int i = m; i <= n; i++) {
            sum += i;
        }
        return sum;
    }

    //高斯算法累和
    public int sum2(int m, int n){
        return (m+n)*(n-m+1)/2;
    }
    
    //遞歸累和
    public int sum3(int m, int n) {
        if (m > n) return 0;
        if (m == n) return m;
        return m + n + sum3(m + 1, n - 1);
    }

    @Test
    public void test1(){

        //普通循環(huán)效率最低
        Date start = new Date();
        int sum = sum1(0, 100000000);
        Date end = new Date();
        System.out.println("普通for循環(huán)結(jié)果"+sum);
        System.out.println("普通for循環(huán)耗時"+(end.getTime()-start.getTime()));
        System.out.println("==================================");


        //高斯運(yùn)算最優(yōu)
        start = new Date();
        sum = sum2(0, 100000000);
        end = new Date();
        System.out.println("高斯運(yùn)算結(jié)果"+sum);
        System.out.println("高斯運(yùn)算耗時"+(end.getTime()-start.getTime()));
        System.out.println("==================================");


        //遞歸運(yùn)算效率不錯,但在數(shù)字過大時后會內(nèi)存溢出
        /*start = new Date();
        sum = sum3(0, 90000);
        end = new Date();
        System.out.println("遞歸運(yùn)算結(jié)果"+sum);
        System.out.println("遞歸運(yùn)算耗時"+(end.getTime()-start.getTime()));*/
    }

}

圖片.png

算法理解:


圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容