遞歸算法
開放分類:數(shù)學(xué)術(shù)語術(shù)語科學(xué)自然科學(xué)計(jì)算機(jī)術(shù)語
遞歸算法是把問題轉(zhuǎn)化為規(guī)模縮小了的同類問題的子問題。然后遞歸調(diào)用函數(shù)(或過程)來表示問題的解。
編輯摘要
目錄
1概述
2漢諾塔C語言遞歸算法
遞歸算法 - 概述
程序調(diào)用自身的編程技巧稱為遞歸( recursion)。
一個(gè)過程或函數(shù)在其定義或說明中又直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序往往十分簡潔易懂。
一般來說,遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿足時(shí),遞歸返回。
注意:
(1) 遞歸就是在過程或函數(shù)里調(diào)用自身;
(2) 在使用遞增歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口,否則將無限進(jìn)行下去(死鎖)。
遞歸算法一般用于解決三類問題:
(1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci函數(shù))
(2)問題解法按遞歸算法實(shí)現(xiàn)。(回溯)
(3)數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。(樹的遍歷,圖的搜索)
遞歸的缺點(diǎn):
遞歸算法解題的運(yùn)行效率較低。在遞歸調(diào)用的過程當(dāng)中系統(tǒng)為每一層的返回點(diǎn)、局部量等開辟了棧來存儲。遞歸次數(shù)過多容易造成棧溢出等。
遞歸算法 - 漢諾塔C語言遞歸算法
遞歸算法 遞歸算法圖冊
漢 諾(Hanoi)塔問題:古代有一個(gè)梵塔,塔內(nèi)有三個(gè)座A、B、C,A座上有64個(gè)盤子,盤子大小不等,大的在下,小的在上(如圖)。有一個(gè)和尚想把這 64個(gè)盤子從A座移到C座,但每次只能允許移動一個(gè)盤子,并且在移動過程中,3個(gè)座上的盤子始終保持大盤在下,小盤在上。在移動過程中可以利用B座,要求 打印移動的步驟。
這個(gè)問題在盤子比較多的情況下,很難直接寫出移動步驟。我們可以先分析盤子比較少的情況。假定盤子從大向小依次為:盤子1,盤子2,...,盤子64。
如果只有一個(gè)盤子,則不需要利用B座,直接將盤子從A移動到C。
如果有2個(gè)盤子,可以先將盤子1上的盤子2移動到B;將盤子1移動到c;將盤子2移動到c。這說明了:可以借助B將2個(gè)盤子從A移動到C,當(dāng)然,也可以借助C將2個(gè)盤子從A移動到B。
如果有3個(gè)盤子,那么根據(jù)2個(gè)盤子的結(jié)論,可以借助c將盤子1上的兩個(gè)盤子從A移動到B;將盤子1從A移動到C,A變成空座;借助A座,將B上的兩個(gè)盤子移動到C。這說明:可以借助一個(gè)空座,將3個(gè)盤子從一個(gè)座移動到另一個(gè)。
如果有4個(gè)盤子,那么首先借助空座C,將盤子1上的三個(gè)盤子從A移動到B;將盤子1移動到C,A變成空座;借助空座A,將B座上的三個(gè)盤子移動到C。
上述的思路可以一直擴(kuò)展到64個(gè)盤子的情況:可以借助空座C將盤子1上的63個(gè)盤子從A移動到B;將盤子1移動到C,A變成空座;借助空座A,將B座上的63個(gè)盤子移動到C。
根據(jù)以上的分析,不難寫出程序:
void Move(char chSour,char chDest)
{
/打印移動步驟/
printf("\nMove the top plate of %c to %c",chSour,chDest);
}
Hanoi(int n,char chA,char chB,char chC)
{
/檢查當(dāng)前的盤子數(shù)量是否為1/
/盤子數(shù)量為1,打印結(jié)果后,不再繼續(xù)進(jìn)行遞歸/
if(n==1)Move(chA,chC);
/盤子數(shù)量大于1,繼續(xù)進(jìn)行遞歸過程/
else
{
Hanoi(n-1,chA,chC,chB);
Move(chA,chC);
Hanoi(n-1,chB,chA,chC);
}
}
main()
{
int n ;
/輸入盤子的數(shù)量/
printf("\nPlease input number of the plates: ");
scanf("%d",&n);
printf("\nMoving %d plates from A to C:",n);
/*調(diào)用函數(shù)計(jì)算,并打印輸出結(jié)果*/
Hanoi(n,'A','B','C');
}
如果n為4,程序輸出結(jié)果為:
Moving 4 plates from A to C:
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of C to A
Move the top plate of C to B
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of B to A
Move the top plate of C to A
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
相關(guān)文獻(xiàn)
萬方數(shù)據(jù)期刊論文一類多折疊環(huán)面混沌吸引子 - 物理學(xué)報(bào) - 200453 ( 7 )
萬方數(shù)據(jù)期刊論文基于二叉樹思想的任意多邊形三角剖分遞歸算法 - 武漢大學(xué)學(xué)報(bào)(信息科學(xué)版) - 200227 ( 5 )
萬方數(shù)據(jù)期刊論文基于受控遞歸算法的時(shí)頻分析 - 電子科技大學(xué)學(xué)報(bào) - 201140 ( 5 )
經(jīng)典計(jì)算機(jī)算法介紹
算法是計(jì)算機(jī)科學(xué)中一門古老而常新的學(xué)科,就像一個(gè)人的思維能力一樣,其重要性對于計(jì)算機(jī)性能的分析、應(yīng)用與改進(jìn)有著至不言而喻的地位。而隨著計(jì) 算機(jī)科學(xué)技術(shù)的發(fā)展,新的算法也隨著新的應(yīng)用漸漸出現(xiàn),但總有一些算法由于其本身具有的特點(diǎn)以及對計(jì)算機(jī)科學(xué)發(fā)展做出的卓越貢獻(xiàn)而成為經(jīng)典,本任務(wù)就是要 介紹這些經(jīng)典算法。
Dijkstra算法
哈希表算法
貪婪算法
隨機(jī)化算法
排序算法 分治算法
最優(yōu)二叉樹算法
回溯算法
舍伍德算法
拉斯維加斯算法 分支界限算法
遞歸算法
統(tǒng)計(jì)算法
動態(tài)規(guī)劃算法
流水線算法 最大流
最小費(fèi)用流
蒙特卡洛算法
搜索算法
單純行算法
附圖
遞歸算
遞歸算法
點(diǎn)擊認(rèn)領(lǐng)
開放分類:數(shù)學(xué)術(shù)語術(shù)語科學(xué)自然科學(xué)計(jì)算機(jī)術(shù)語
遞歸算法是把問題轉(zhuǎn)化為規(guī)模縮小了的同類問題的子問題。然后遞歸調(diào)用函數(shù)(或過程)來表示問題的解。
編輯摘要
目錄
1概述
2漢諾塔C語言遞歸算法
遞歸算法 - 概述
程序調(diào)用自身的編程技巧稱為遞歸( recursion)。
一個(gè)過程或函數(shù)在其定義或說明中又直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序往往十分簡潔易懂。
一般來說,遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿足時(shí),遞歸返回。
注意:
(1) 遞歸就是在過程或函數(shù)里調(diào)用自身;
(2) 在使用遞增歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口,否則將無限進(jìn)行下去(死鎖)。
遞歸算法一般用于解決三類問題:
(1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci函數(shù))
(2)問題解法按遞歸算法實(shí)現(xiàn)。(回溯)
(3)數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。(樹的遍歷,圖的搜索)
遞歸的缺點(diǎn):
遞歸算法解題的運(yùn)行效率較低。在遞歸調(diào)用的過程當(dāng)中系統(tǒng)為每一層的返回點(diǎn)、局部量等開辟了棧來存儲。遞歸次數(shù)過多容易造成棧溢出等。
遞歸算法 - 漢諾塔C語言遞歸算法
遞歸算法 遞歸算法圖冊
漢 諾(Hanoi)塔問題:古代有一個(gè)梵塔,塔內(nèi)有三個(gè)座A、B、C,A座上有64個(gè)盤子,盤子大小不等,大的在下,小的在上(如圖)。有一個(gè)和尚想把這 64個(gè)盤子從A座移到C座,但每次只能允許移動一個(gè)盤子,并且在移動過程中,3個(gè)座上的盤子始終保持大盤在下,小盤在上。在移動過程中可以利用B座,要求 打印移動的步驟。
這個(gè)問題在盤子比較多的情況下,很難直接寫出移動步驟。我們可以先分析盤子比較少的情況。假定盤子從大向小依次為:盤子1,盤子2,...,盤子64。
如果只有一個(gè)盤子,則不需要利用B座,直接將盤子從A移動到C。
如果有2個(gè)盤子,可以先將盤子1上的盤子2移動到B;將盤子1移動到c;將盤子2移動到c。這說明了:可以借助B將2個(gè)盤子從A移動到C,當(dāng)然,也可以借助C將2個(gè)盤子從A移動到B。
如果有3個(gè)盤子,那么根據(jù)2個(gè)盤子的結(jié)論,可以借助c將盤子1上的兩個(gè)盤子從A移動到B;將盤子1從A移動到C,A變成空座;借助A座,將B上的兩個(gè)盤子移動到C。這說明:可以借助一個(gè)空座,將3個(gè)盤子從一個(gè)座移動到另一個(gè)。
如果有4個(gè)盤子,那么首先借助空座C,將盤子1上的三個(gè)盤子從A移動到B;將盤子1移動到C,A變成空座;借助空座A,將B座上的三個(gè)盤子移動到C。
上述的思路可以一直擴(kuò)展到64個(gè)盤子的情況:可以借助空座C將盤子1上的63個(gè)盤子從A移動到B;將盤子1移動到C,A變成空座;借助空座A,將B座上的63個(gè)盤子移動到C。
根據(jù)以上的分析,不難寫出程序:
void Move(char chSour,char chDest)
{
/打印移動步驟/
printf("\nMove the top plate of %c to %c",chSour,chDest);
}
Hanoi(int n,char chA,char chB,char chC)
{
/檢查當(dāng)前的盤子數(shù)量是否為1/
/盤子數(shù)量為1,打印結(jié)果后,不再繼續(xù)進(jìn)行遞歸/
if(n==1)Move(chA,chC);
/盤子數(shù)量大于1,繼續(xù)進(jìn)行遞歸過程/
else
{
Hanoi(n-1,chA,chC,chB);
Move(chA,chC);
Hanoi(n-1,chB,chA,chC);
}
}
main()
{
int n ;
/輸入盤子的數(shù)量/
printf("\nPlease input number of the plates: ");
scanf("%d",&n);
printf("\nMoving %d plates from A to C:",n);
/*調(diào)用函數(shù)計(jì)算,并打印輸出結(jié)果*/
Hanoi(n,'A','B','C');
}
如果n為4,程序輸出結(jié)果為:
Moving 4 plates from A to C:
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of C to A
Move the top plate of C to B
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of B to A
Move the top plate of C to A
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
相關(guān)文獻(xiàn)
萬方數(shù)據(jù)期刊論文一類多折疊環(huán)面混沌吸引子 - 物理學(xué)報(bào) - 200453 ( 7 )
萬方數(shù)據(jù)期刊論文基于二叉樹思想的任意多邊形三角剖分遞歸算法 - 武漢大學(xué)學(xué)報(bào)(信息科學(xué)版) - 200227 ( 5 )
萬方數(shù)據(jù)期刊論文基于受控遞歸算法的時(shí)頻分析 - 電子科技大學(xué)學(xué)報(bào) - 201140 ( 5 )
經(jīng)典計(jì)算機(jī)算法介紹
算法是計(jì)算機(jī)科學(xué)中一門古老而常新的學(xué)科,就像一個(gè)人的思維能力一樣,其重要性對于計(jì)算機(jī)性能的分析、應(yīng)用與改進(jìn)有著至不言而喻的地位。而隨著計(jì) 算機(jī)科學(xué)技術(shù)的發(fā)展,新的算法也隨著新的應(yīng)用漸漸出現(xiàn),但總有一些算法由于其本身具有的特點(diǎn)以及對計(jì)算機(jī)科學(xué)發(fā)展做出的卓越貢獻(xiàn)而成為經(jīng)典,本任務(wù)就是要 介紹這些經(jīng)典算法。
Dijkstra算法
哈希表算法
貪婪算法
隨機(jī)化算法
排序算法 分治算法
最優(yōu)二叉樹算法
回溯算法
舍伍德算法
拉斯維加斯算法 分支界限算法
遞歸算法
統(tǒng)計(jì)算法
動態(tài)規(guī)劃算法
流水線算法 最大流
最小費(fèi)用流
蒙特卡洛算法
搜索算法
單純行算法
附圖
為本詞條添加視頻和組圖相關(guān)影像
開放分類:我來補(bǔ)充
數(shù)學(xué)術(shù)語 術(shù)語 科學(xué) 自然科學(xué) 計(jì)算機(jī)術(shù)語 計(jì)算機(jī)科學(xué)技術(shù)名詞 計(jì)算機(jī)算法 計(jì)算機(jī)編程
互動百科的詞條(含所附圖片)系由網(wǎng)友上傳,如果涉嫌侵權(quán),請與客服聯(lián)系,我們將按照法律之相關(guān)規(guī)定及時(shí)進(jìn)行處理。未經(jīng)許可,禁止商業(yè)網(wǎng)站等復(fù)制、抓取本站內(nèi)容;合理使用者,請注明來源于www.baike.com。
歡迎加入互動百科大家庭,和互動百科超過770萬專業(yè)認(rèn)證智愿者一起,分享你的真知灼見。
如果你對大家的討論有興趣,可以點(diǎn)擊“贊”和“鄙視”的大拇指,來表達(dá)你的看法。
討論區(qū)的精彩內(nèi)容,會被用戶頂?shù)阶钌厦妫尭嗳烁惺艿酱蠹业耐扑],你注意到了嗎?
登錄后使用互動百科的服務(wù),將會得到個(gè)性化的提示和幫助,還有機(jī)會和770多萬專業(yè)認(rèn)證智愿者溝通。
互動百科用戶登錄
您也可以使用以下網(wǎng)站賬號登錄:
人人網(wǎng)賬號登錄
QQ賬號登錄
新浪微博賬戶登錄
此詞條還可添加 信息模塊
遞歸算法圖冊
WIKI熱度
該詞條未被認(rèn)領(lǐng),趕快點(diǎn)擊認(rèn)領(lǐng)吧!
編輯次數(shù):13次 歷史版本
參與編輯人數(shù):11位
最近更新時(shí)間:2013-11-13 10:48:11
貢獻(xiàn)光榮榜
更多
創(chuàng)建者:不*死鳥
我愛你的眼睛
中國語言文學(xué)副教授
無國界
大學(xué)生
hzwjh
大學(xué)生
綠領(lǐng)巾
中國語言文學(xué)講師
宮華
大學(xué)生
相關(guān)詞條
編輯
JDBC
java數(shù)據(jù)庫連接
plascal教程
遞歸可枚舉集
EOS
PHP
可計(jì)算性理論
nesC
anaconda
pascal語言教…
分類熱詞
函數(shù)
中央處理器
五角星
物理學(xué)
運(yùn)算放大器
質(zhì)量
圓周率
三角函數(shù)
壓力
相對論
請?zhí)嵋庖?br>
幫助中心
服務(wù)熱線:86-10-62303127(9:00-21:00)
關(guān)于我們
新聞中心
服務(wù)協(xié)議
互動合作
友情鏈接
招聘信息
聯(lián)系我們
站點(diǎn)地圖
知識官網(wǎng)
百科營銷
互動在線 版權(quán)所有 Powered by HDwiki ? 2015
編輯
分享
贊
掃描二維碼用手機(jī)瀏覽詞條
保存二維碼可印刷到宣傳品
你感興趣
JDBC JDBC
遞歸可枚舉集 遞歸可枚舉集
EOS EOS
PHP PHP
關(guān)閉