intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Kỹ thuật đệ qui

Chia sẻ: Roong KLoi | Ngày: | Loại File: PDF | Số trang:18

79
lượt xem
3
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nội dung của tài liệu trình bày về kỹ thuật lập trình đệ qui, khái niệm về chương trình đệ qui, các dạng chương trình đệ qui, theo dõi hoạt động của chương trình đệ qui, một số bài toán đệ qui thông dụng và một số ứng dụng khác.

Chủ đề:
Lưu

Nội dung Text: Kỹ thuật đệ qui

KYÕ THUAÄT ÑEÄ QUI<br /> Kyõ thuaät laäp trình ñeä qui coù yù nghóa raát lôùn trong khoa hoïc maùy tính, coù raát<br /> nhieàu thuaät toaùn ñoøi hoûi caøi ñaët raát phöùc taïp vaø caàu kyø neáu khoâng duøng kyõ thuaät<br /> ñeä qui. Ñoái vôùi moät soá thuaät toaùn do baûn chaát töï nhieân cuûa chuùng ñaõ mang tính ñeä<br /> qui, vieäc caøi ñaët ñeä qui laø goïn vaø ñeïp nhaát. Khuyeát ñieåm lôùn nhaát cuûa kyõ thuaät ñeä<br /> qui laø: lôøi giaûi ñeä qui cho moät soá baøi toaùn coù theå bò chaïy raát chaäm do söï buøng noã toå<br /> hôïp.<br /> I.<br /> <br /> KHAÙI NIEÄM VEÀ CHÖÔNG TRÌNH ÑEÄ QUI<br /> Moät thuû tuïc (hay haøm) ñöôïc goïi laø coù tính ñeä qui neáu trong thaân cuûa thuû tuïc<br /> (hay haøm) ñoù coù leänh goïi laïi chính noù moät caùch töôøng minh hay tieàm aån.<br /> Ví duï 1. Vôùi n laø soá nguyeân khoâng aâm, ta ñònh nghóa n! nhö sau:<br /> 0!=1,<br /> n!=n.(n-1)! neáu n≥1.<br /> Haõy caøi ñaët chöông trình tính n!.<br /> Ñaây laø moät ví duï coù theå caøi ñaët deã daøng baèng phöông phaùp thoâng thöôøng, tuy<br /> nhieân neáu döïa vaøo ñònh nghóa cuûa n! chuùng ta coù theå caøi ñaët moät caùch töï nhieân<br /> baèng phöông phaùp ñeä qui nhö sau.<br /> long GiaiThua(int n) /* n >= 0 */<br /> {<br /> long ret;<br /> /* gia tri traû veà cuûa haøm */<br /> if(n==0)<br /> /* ñieàu kieän kieän döøng */<br /> ret = 1;<br /> else<br /> ret = n*GiaiThua(n-1); /* goïi laïi chính noù */<br /> return ret;<br /> }<br /> Ñoái vôùi ví duï naày, caùch caøi ñaët baèng ñeä qui raát töï nhieân vaø ñôn giaûn nhöng<br /> khoâng phaûi laø caùch caøi ñaët hay nhaát. Chuù yù raèng baát kyø haøm ñeä qui naøo cuõng phaûi<br /> coù ñieàu kieän döøng, ñieàu kieän naày seõ keát thuùc quaù trình ñeä qui baèng moät ñoaïn maõ<br /> chöông trình ñöôïc vieát theo loái thoâng thöôøng. Caâu leänh if(n==0)... trong ví duï treân<br /> laø ñieàu kieän döøng cuûa haøm GiaiThua.<br /> Ví duï 2. Haøm tính caên baäc 3 cuûa moät soá thöïc coù theå caøi ñaët ñeä qui theo hai haøm<br /> exp vaø log (haøm logarithm ln(x)) nhôø vaøo nhaän xeùt sau ñaây:<br /> <br /> x > 0 : 3 x = e ln ( x ) / 3<br /> x = 0: 3 x = 0<br /> x < 0: 3 x = − 3 − x .<br /> <br /> Kyõ thuaät ñeä qui - Trần Đan Thư, Khoa CNTT, Trường ĐHKHTN, ĐHQGTP HCM<br /> <br /> 14<br /> <br /> #include <br /> #include <br /> double sqrt3(double x)<br /> {<br /> double ret;<br /> if(x==0)<br /> /* ñieàu kieän döøng */<br /> ret = 0;<br /> else<br /> if(x=1 && x+strlen(ch)-1=1 && y<br /> {<br /> if(< ñieàu kieän döøng >)<br /> {<br /> /* Traû veà giaù trò hay keát thuùc coâng vieäc ...*/<br /> }<br /> else<br /> {<br /> /* Laøm moät soá coâng vieäc ... */<br /> /* Goïi ñeä qui */<br /> }<br /> }<br /> II.2 Ñeä qui nhò phaân<br /> Caùc haøm ñeä qui nhò phaân coù daïng sau ñaây.<br /> < Teân vaø danh saùch tham soá ><br /> {<br /> if(< ñieàu kieän döøng >)<br /> {<br /> /* Traû veà giaù trò hay keát thuùc coâng vieäc ... */<br /> }<br /> else<br /> {<br /> /* Laøm moät soá coâng vieäc ...*/<br /> /* Goïi ñeä qui (1) ñeå giaûi quyeát vaán ñeà nhoû hôn */<br /> /* Goïi ñeä qui (2) ñeå giaûi quyeát noát vaán ñeà coøn laïi */<br /> }<br /> <br /> Kyõ thuaät ñeä qui - Trần Đan Thư, Khoa CNTT, Trường ĐHKHTN, ĐHQGTP HCM<br /> <br /> 16<br /> <br /> }<br /> Ñeä qui nhò phaân ñoùng vai troø raát quan troïng, chuùng ta thöôøng duøng phöông<br /> phaùp naày ñeå caøi ñaët caùc thuaät toaùn "chia ñeå trò", thuaät toaùn duyeät caây nhò phaân...<br /> Ví duï: Daõy Fibonaci {Fn} ñöôïc ñònh nghóa truy hoài nhö sau:<br /> Fo=F1=1,<br /> Fn=Fn-1 + Fn-2 neáu n ≥ 2.<br /> <br /> Haøm ñeä qui nhò phaân sau ñaây seõ tính giaù trò cuûa Fn, giaù trò phaàn töû thöù n trong<br /> daõy Fibonaci, baèng caøi ñaët ñeä qui, ñaây laø moät caøi ñaët töï nhieân vaø ñôn giaûn nhaát<br /> nhöng cuõng laø caùch caøi ñaët chaïy chaäm nhaát.<br /> long Fibo(int n)<br /> {<br /> long ret, Fn_1, Fn_2;<br /> if(n
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2