真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java遞歸優(yōu)化的方法是什么

這篇文章主要講解了“Java遞歸優(yōu)化的方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java遞歸優(yōu)化的方法是什么”吧!

目前成都創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、孟連網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

   1.go to語法

    今天偶然看到ThreadPoolExecutor的addworker方法用到了go to,他到底是個優(yōu)雅高級語法,還是個混淆語法。

public static void main(String[] args) {        for (int i = 0; i <2; i++) {            for (int j = 0; j < 5; j++) {                System.out.println(j);                if(j==3){                    break;                }            }        }        System.out.println("==================");        retry:        for (int i = 0; i <2; i++) {            for (int j = 0; j < 5; j++) {                System.out.println(j);                if(j==3){                    break retry;                }            }        }    }

普通的break跳出了當(dāng)前for循環(huán),但沒有結(jié)束外層循環(huán)

retry 標(biāo)識此處循環(huán)跳出,標(biāo)識位在外層循環(huán)外面,跳出外循環(huán)。

   2.遞歸優(yōu)化

遞歸算法空間復(fù)雜度:遞歸深度n*每次遞歸所要的輔助空間,如果每次遞歸所需要的輔助空間為常數(shù),則遞歸空間復(fù)雜度o(n)。

    優(yōu)化前

public Long filterOrg(Long orgId) {        CountVo vo= gMapper.queryOrId(orgId);        if(vo==null){            return orgId;        }else if(1==vo.getPid()){            return orgId;        }else{            return filterOrg(vo.getPid());        }

業(yè)務(wù)邏輯不考慮pid為null情況

  1. 參數(shù)傳入之前寫在lambada表達(dá)式中沒有判空

  2. 這個if看著賊煩

  3. N級節(jié)點遞歸層次太深

優(yōu)化

 public Long filterOrg(Long orgId) {        if (orgId == 1) return orgId;        Long serachId = orgId;        for (; ;) {             CountVo vo = this.queryOrgId(serachId);             if(vo==null||vo.getPid()==1)return orgId;            serachId=vo.getPid();        }    }

然后kk不知廉恥的寫上了一段注釋,深藏功與名

 /**     * 功能描述: 舍棄遞歸,復(fù)雜度降低,避免棧溢出     * @Param: [orgId]     * @Return: java.lang.Long     * @Author: kk     */

看著這個多層if就想起被千行foreach+if支配的恐懼,必須干掉他,寫到這竟然笑出了聲,可能這就是菜雞成長的喜悅吧。

尾遞歸

函數(shù)調(diào)用自身,稱為遞歸。如果尾調(diào)用自身,就稱為尾遞歸。遞歸非常耗費內(nèi)存,因為需要同時保存成千上百個調(diào)用幀,很容易發(fā)生“棧溢出”錯誤(stack overflow)。但對于尾遞歸來說,由于只存在一個調(diào)用幀,所以永遠(yuǎn)不會發(fā)生“棧溢出”錯誤。這個優(yōu)化厲害了

function factorial(n, total) {  if (n === 1) return total;  return factorial(n - 1, n * total);} factorial(5, 1) // 120

尾遞歸優(yōu)化

function Fibonacci2 (n , ac1 = 1 , ac2 = 1) {  if( n <= 1 ) {return ac2};   return Fibonacci2 (n - 1, ac2, ac1 + ac2);} Fibonacci2(100) // 573147844013817200000Fibonacci2(1000) // 7.0330367711422765e+208Fibonacci2(10000) // Infinityhttps://blog.csdn.net/qq_37818095/article/details/81944809

雖然這是js的

用隊列優(yōu)化遞歸

    public void getFile(File file){        if(file.isDirectory()){//如果是目錄            File[] files = file.listFiles();            for(int i=0;i

使用隊列優(yōu)化。

//創(chuàng)建一個隊列Queen queue = new LinkedList();queue.offer(file);while(!queue.isEmpty()){//如果隊列不為空File file = queue.poll();if(file.isDirectory()){//從隊列中獲取一個FileFile[] files = file.listFiles();//是目錄,將目錄下所有文件遍歷出來,存儲到隊列中for(int i =0;i

}

感謝各位的閱讀,以上就是“Java遞歸優(yōu)化的方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java遞歸優(yōu)化的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


網(wǎng)頁題目:Java遞歸優(yōu)化的方法是什么
網(wǎng)頁路徑:http://weahome.cn/article/gscsih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部