遞歸在實際項目中的應用

需求背景

項目中有很多頁面,它們之間有父子關聯關係,在審覈查看某個頁面信息的時候,需要能看到該頁面的頁面路徑,即顯示該頁面的所有父頁面名稱,並按照依次順序用箭頭拼接起來;

技術實現

  private String lastPathName = "";

    /**
     * 遞歸查找該頁面的是否有父頁面,並拼接成頁面路徑
     * @param epgpage
     * @param pathname
     * @return
     */
    public String findPathName(Epgpage epgpage,String pathname){
        if(epgpage.getParentid() == null){
            lastPathName = pathname;
            return pathname;
        }else{
            Epgpage oneEpgpage = epgPageService.getEpgPageById(epgpage.getParentid());
            pathname = oneEpgpage.getName()+"→"+pathname;
            findPathName(oneEpgpage,pathname);
        }
        return pathname;
    }

問題設立

1.如何結束循環;
2.return是結束本層還是結束整個流程;

問題分析

1.根據該頁面是否有parentid來判斷該頁面是否有父頁面,如果沒有父頁面,就結束循環,如果有父頁面,就獲取父頁面的名稱,並繼續執行遞歸調用,直至沒有父頁面爲止;
2.經過斷點調試查看,return只能跳出本層循環,還會接着去執行子頁面的遞歸方法,因此如果直接用retrun 返回拼接的路徑的話,最終這個值會被後面執行的遞歸方法改變,不可取;

問題解決

設置一箇中間變量,在滿足條件(即沒有父頁面時,將拼接的路徑賦值給這個臨時變量),這個時候,不用管後面的流程怎麼走,都不會再改變這個臨時變量的值,這樣在需要用到的地方就可以直接使用這個臨時變量了;

實現效果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章