java代碼如何書寫遞歸 java遞歸簡單例子

JAVA中能夠?qū)崿F(xiàn)方法的遞歸調(diào)用嗎?如何實(shí)現(xiàn)?

使用遞歸計(jì)算5的階乘,遞歸代碼的書寫得找出原問題兩個(gè)顯著的特點(diǎn),1.上一層與下一層之間的關(guān)系,或者公式。2.跳出遞歸的條件。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了永安免費(fèi)建站歡迎大家使用!

階乘:0!=1,1!=1,2!=1!*2,3!=2!*3,4!=4*3!,5!=5*4!。由這6個(gè)式子我們可知,求5的階乘,得求4的階乘,求4的階乘必須先求3的階乘,以此類推。故,什么時(shí)候才能停止往下(繼續(xù)往下找呢),我們只0!=1,這就是跳出遞歸的條件,這是固定的。上下層之間的關(guān)系,5!=4!*5,假設(shè)n=5,那么用未知數(shù)可表示n!=(n-1)!*n。具體代碼如下。

public

class

Test

{

public

static

void

main(String[]

args)

{

int

num=fac(5);

System.out.println(num);

}

public

static

int

fac(int

n){

if(n==1){//跳出遞歸的條件:0!=1

return

1;

}else{

int

num=n*fac(n-1);//上下層的關(guān)系:n!=(n-1)!*n

return

num;

}

}

JAVA中的遞歸方法?

自己調(diào)用自己或幾個(gè)方法相互調(diào)用。

最經(jīng)典的是求正整數(shù)階的算法:

int fact(int i){

if(i=1)return 1;

return fact(i-1)*i;

}

多數(shù)遞歸方法可以轉(zhuǎn)換成非遞歸方法。

一般同功能的非遞歸方法,執(zhí)行效率要優(yōu)于遞歸方法。但合理的使用遞歸方法,可以使代碼結(jié)構(gòu)更清晰,更有可讀性,從而更方便維護(hù)。

Java是一種可以撰寫跨平臺(tái)應(yīng)用程序的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。Java?技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。

用java遞歸方法實(shí)現(xiàn)

1、遞歸做為一種算法在程序設(shè)計(jì)語言中廣泛使用,是指函數(shù)/過程/子程序在運(yùn)行過程中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。

2、遞歸算法一般用于解決三類問題:

1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci(斐波那契)的函數(shù))

2)問題解法按遞歸算法實(shí)現(xiàn)。(回溯)

3)數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。(樹的遍歷,圖的搜索)

java的遞歸查詢怎么寫

原文在這里,寫得不錯(cuò),樓主可參考下,具體鏈接如下,我只是搬運(yùn)工!

/**?

*?說明方法描述:將list轉(zhuǎn)為樹tree結(jié)構(gòu)?

*??

*?@param?allRrecords?

*?@return?

*?@time?2016年5月10日?下午6:00:35?

*?@author?yangdong?

*/??

public?ListRecord?useListRecordToTree(ListRecord?allRrecords)?{??

ListRecord?listParentRecord?=?new?ArrayListRecord();??

ListRecord?listNotParentRecord?=?new?ArrayListRecord();??

//?第一步:遍歷allRrecords保存所有數(shù)據(jù)的uuid用于判斷是不是根節(jié)點(diǎn)??

MapString,?String?mapAllUuid?=?new?HashMapString,?String();??

MapString,?Record?allRecordMap?=?new?HashMapString,?Record();??

for?(Record?record?:?allRrecords)?{??

mapAllUuid.put(record.getStr("uuid"),?record.getStr("uuid"));??

allRecordMap.put(record.getStr("uuid"),?record);??

}??

//?第二步:遍歷allRrecords找出所有的根節(jié)點(diǎn)和非根節(jié)點(diǎn)??

if?(allRrecords?!=?null??allRrecords.size()??0)?{??

for?(Record?record?:?allRrecords)?{??

if?(StringUtil.isBlank(record.getStr("parent_uuid"))??

||?!mapAllUuid.containsKey(record.getStr("parent_uuid")))?{??

listParentRecord.add(record);??

}?else?{??

listNotParentRecord.add(record);??

}??

}??

}??

//?第三步:?遞歸獲取所有子節(jié)點(diǎn)??

if?(listParentRecord.size()??0)?{??

for?(Record?record?:?listParentRecord)?{??

//?添加所有子級??

record.set("childs",?this.getTreeChildRecord(listNotParentRecord,?record.getStr("uuid")));??

}??

}??

return?listParentRecord;??

}??

/**?

*?說明方法描述:使list轉(zhuǎn)換為樹并根據(jù)關(guān)鍵字和節(jié)點(diǎn)名稱過濾?

*??

*?@param?allRecords?所有節(jié)點(diǎn)?

*?@param?keywords?要過濾的關(guān)鍵字?

*?@param?filterFields?要過濾的字段?

*?@return?

*?@time?2016年5月19日?下午3:27:32?

*?@author?yangdong?

*/??

public?ListRecord?useListRecordToTreeByKeywords(ListRecord?allRecords,?String?keywords,?String...?filterFields)?{??

ListRecord?listRecord?=?new?ArrayListRecord();??

MapString,?Record?allRecordMap?=?new?HashMapString,?Record();??

for?(Record?record?:?allRecords)?{??

allRecordMap.put(record.getStr("uuid"),?record);??

}??

//?遍歷allRrecords找出所有的nodeName和關(guān)鍵字keywords相關(guān)的數(shù)據(jù)??

if?(allRecords?!=?null??allRecords.size()??0)?{??

if?(filterFields.length??1)?{??

for?(Record?record?:?allRecords)?{??

for?(String?field?:?filterFields)?{??

//?比較??

if?(record.getStr(field).toLowerCase().indexOf(keywords.toLowerCase())?!=?-1)?{??

listRecord.add(record);??

}??

}??

}??

}?else?{??

for?(Record?record?:?allRecords)?{??

//?比較??

if?(record.getStr(filterFields[0]).toLowerCase().indexOf(keywords.toLowerCase())?!=?-1)?{??

listRecord.add(record);??

}??

}??

}??

}??

//?查找過濾出來的節(jié)點(diǎn)和他們的父節(jié)點(diǎn)??

listRecord?=?this.getSelfAndTheirParentRecord(listRecord,?new?ArrayListRecord(),??

new?HashMapString,?Record(),?allRecordMap);??

//?將過濾出來的數(shù)據(jù)變成樹tree結(jié)構(gòu)??

listRecord?=?this.useListRecordToTree(listRecord);??

return?listRecord;??

}??

/**?

*?說明方法描述:遞歸查詢子節(jié)點(diǎn)?

*??

*?@param?childList?子節(jié)點(diǎn)?

*?@param?parentUuid?父節(jié)點(diǎn)id?

*?@return?

*?@time?2016年5月10日?下午3:29:35?

*?@author?yangdong?

*/??

private?ListRecord?getTreeChildRecord(ListRecord?childList,?String?parentUuid)?{??

ListRecord?listParentRecord?=?new?ArrayListRecord();??

ListRecord?listNotParentRecord?=?new?ArrayListRecord();??

//?遍歷tmpList,找出所有的根節(jié)點(diǎn)和非根節(jié)點(diǎn)??

if?(childList?!=?null??childList.size()??0)?{??

for?(Record?record?:?childList)?{??

//?對比找出父節(jié)點(diǎn)??

if?(StringUtil.equals(record.getStr("parent_uuid"),?parentUuid))?{??

listParentRecord.add(record);??

}?else?{??

listNotParentRecord.add(record);??

}??

}??

}??

//?查詢子節(jié)點(diǎn)??

if?(listParentRecord.size()??0)?{??

for?(Record?record?:?listParentRecord)?{??

//?遞歸查詢子節(jié)點(diǎn)??

record.set("childs",?getTreeChildRecord(listNotParentRecord,?record.getStr("uuid")));??

}??

}??

return?listParentRecord;??

}??

/**?

*?說明方法描述:遞歸找出本節(jié)點(diǎn)和他們的父節(jié)點(diǎn)?

*??

*?@param?parentList?根據(jù)關(guān)鍵字過濾出來的相關(guān)節(jié)點(diǎn)的父節(jié)點(diǎn)?

*?@param?resultList?返回的過濾出來的節(jié)點(diǎn)?

*?@param?filterRecordMap?已經(jīng)過濾出來的節(jié)點(diǎn)?

*?@param?allRecordMap?所有節(jié)點(diǎn)?

*?@return?

*?@time?2016年5月19日?上午9:53:56?

*?@author?yangdong?

*/??

private?ListRecord?getSelfAndTheirParentRecord(ListRecord?parentList,?ListRecord?resultList,??

MapString,?Record?filterRecordMap,??

MapString,?Record?allRecordMap)?{??

//?當(dāng)父節(jié)點(diǎn)為null或者節(jié)點(diǎn)數(shù)量為0時(shí)返回結(jié)果,退出遞歸??

if?(parentList?==?null?||?parentList.size()?==?0)?{??

return?resultList;??

}??

//?重新創(chuàng)建父節(jié)點(diǎn)集合??

ListRecord?listParentRecord?=?new?ArrayListRecord();??

//?遍歷已經(jīng)過濾出來的節(jié)點(diǎn)??

for?(Record?record?:?parentList)?{??

String?uuid?=?record.getStr("uuid");??

String?parent_uuid?=?record.getStr("parent_uuid");??

//?如果已經(jīng)過濾出來的節(jié)點(diǎn)不存在則添加到list中??

if?(!filterRecordMap.containsKey(uuid))?{??

listParentRecord.add(record);//?添加到父節(jié)點(diǎn)中??

filterRecordMap.put(uuid,?record);//?添加到已過濾的map中??

allRecordMap.remove(uuid);//?移除集合中相應(yīng)的元素??

resultList.add(record);//?添加到結(jié)果集中??

}??

//?找出本節(jié)點(diǎn)的父節(jié)點(diǎn)并添加到listParentRecord父節(jié)點(diǎn)集合中,并移除集合中相應(yīng)的元素??

if?(StringUtil.isNotBlank(parent_uuid))?{??

Record?parentRecord?=?allRecordMap.get(parent_uuid);??

if?(parentRecord?!=?null)?{??

listParentRecord.add(parentRecord);??

allRecordMap.remove(parent_uuid);??

}??

}??

}??

//?遞歸調(diào)用??

getSelfAndTheirParentRecord(listParentRecord,?resultList,?filterRecordMap,?allRecordMap);??

return?resultList;??

}??

[java]?view?plain?copy

//示例??

[java]?view?plain?copy

/**?

*?說明方法描述:遞歸查詢所有權(quán)限?

*??

*?@param?keyword?

*?@param?is_deleted?

*?@return?

*?@time?2016年5月10日?下午3:47:50?

*?@author?yangdong?

*/??

public?ListRecord?getRecordByKeywordRecursive(String?keyword,?String?is_deleted)?{??

//?第一步:查詢所有的數(shù)據(jù)??

StringBuffer?sql?=?new?StringBuffer(??

"?select?pa.uuid,pa.parent_uuid,pa.author_code,pa.author_name,pa.is_menu,pa.sort_number,pa.is_enable,pa.menu_icon?");??

sql.append("??from?s_author?pa");??

ListObject?params?=?new?ArrayListObject();??

sql.append("?where??pa.is_deleted=??");??

params.add(is_deleted);??

sql.append("?order?by?pa.sort_number?asc?");??

ListRecord?allRrecords?=?Db.use(AppConst.DB_DATASOURCE_MAIN).find(sql.toString(),?ParamUtil.listToArray(params));??

[java]?view?plain?copy

//第二步:將list變?yōu)闃鋞ree結(jié)構(gòu)??

if?(StringUtil.isNotBlank(keyword))?{??

return?super.useListRecordToTreeByKeywords(allRrecords,?keyword,?"author_name");??

}?else?{??

return?super.useListRecordToTree(allRrecords);??

}??

}

文章名稱:java代碼如何書寫遞歸 java遞歸簡單例子
網(wǎng)站路徑:http://muchs.cn/article42/doecchc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、微信小程序、響應(yīng)式網(wǎng)站、全網(wǎng)營銷推廣商城網(wǎng)站、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)