Trong bất cứ hàm đệ qui nào cũng phải có điều kiện dừng, điều kiện này sẽ kết thúc quá trình đệ qui bằng một đoạn mã chương trình được viết theo lối thông thường... Sử dụng cấu trúc lự
Trang 1TIN HỌC ĐẠI CƯƠNG
www.uit.edu.vn
BÀI 11
ĐỆ QUY
Trang 3 Đệ qui phi tuyến
NỘI DUNG BÀI ĐỆ QUY
Trang 4 Trong bất cứ hàm đệ qui nào cũng phải có điều
kiện dừng, điều kiện này sẽ kết thúc quá trình
đệ qui bằng một đoạn mã chương trình được viết theo lối thông thường
Ví dụ:
if (N==1)
return 1;
ĐIỀU KIỆN DỪNG
Trang 5Sử dụng cấu trúc lựa chọn Sử dụng cấu trúc lặp
Sử dụng liên tục các lời gọi hàm Sử dụng vòng lặp tường minh Kết thúc khi đến trường hợp cơ sở Kết thúc khi điều kiện để tiếp
tục vòng lặp sai Làm cho các lời gọi hàm đơn giản dần cho
đến khi tới trường hợp cơ sở Thay đổi biến đếm trong vòng lặp cho đến khi nó làm cho
điều kiện lặp sai Không thoát ra được khi các bước đệ qui
không làm cho bài toán đơn giản hơn và cuối
cùng hội tụ về trường hợp cơ sở
Lặp sẽ không thoát ra được khi điều kiện lặp không bao giờ sai
Đệ qui tồi hơn, nó liên tục đưa ra các lời gọi
hàm làm tốn thời gian xử lý và không gian
nhớ Mỗi lần gọi hàm, lại cần thêm một bản
sao của hàm, tốn thêm bộ nhớ (lưu các biến
của hàm, địa chỉ trở về của hàm )
Phương pháp lặp được chuộng hơn
SO SÁNH ĐỆ QUY VÀ LẶP
Trang 6 Đệ qui phi tuyến
PHÂN LOẠI CÁC DẠNG ĐỆ QUY
Trang 8 Viết hàm đệ qui tính xn, n nguyên dương.
Điều kiện dừng: nếu n=0 thì x 0 =1.
}
VÍ DỤ VỀ ĐỆ QUY TUYẾN TÍNH
Trang 9/*Gọi đqui đến <tên> để
giải quyết vấn đề nhỏ hơn */
/*Gọi đqui đến <tên> để
giải quyết vấn đề còn lại */
ĐỆ QUY NHỊ PHÂN
Trang 10 Điều kiện dừng: nếu n=0 hay n=1 thì Fn=1.
long fibo( int n) {
if ((n==0)||(n==1)) return 1;
else
return (fibo(n-1)+fibo(n-2));
VÍ DỤ VỀ ĐỆ QUY NHỊ PHÂN
Trang 13ĐỆ QUY HỖ TƯƠNG
Trang 15/* Prototype */
unsigned long TinhY( int n);
unsigned long TinhX( int n);
Trang 18 Tập tin văn bản (text file, ASCII file): *.PAS, *.C, …
(các tập tin mã nguồn chương trình) Mỗi tập tin văn bản gồm nhiều dòng Mã ngăn cách dòng (chuyển dòng khác) là mã 10 ($OA), được tách ra thành mã 13 ($OD) và mã 10 ($OA) Mã kết thúc tập tin là mã 26 ($O1A) Các ký tự trên mỗi dòng đều phải có mã ASCII từ khoảng trắng (#32 hay
$O20) trở lên, nếu nhỏ hơn $O20 thì phải là các
ký tự điều khiển hợp lệ.
Tập tin nhị phân (binary file): *.COM, *.EXE,
*.DOC, *.XLS, *BMP, *PCX, *.GIF,…
Dữ liệu ghi lên tập tin không bị thay đổi và khi ta
đóng tập tin thì mã kết thúc tập tin sẽ được ghi lên
KHÁI NIỆM TẬP TIN
Trang 19 Có các hàm làm việc với tập tin thông qua con trỏ tập
tin FILE *pf; Con trỏ này được xác định khi ta mở tập tin
Mỗi biến file đại diện trong RAM luôn có một con trỏ
file Lúc đầu, con trỏ file trỏ vào phần tử đầu tiên, sau mỗi lần đọc hay ghi dữ liệu vào biến file con trỏ tự động trỏ tới mẫu tin kế tiếp.
Chỉ thao tác được trên file khi file đang được mở.
CÁC THAO TÁC TRÊN FILE
Trang 20w+ Mở một tập tin ở cả hai chế độ ghi đọc.
a+ Tập tin được mở để ghi và đọc Vị trí đầu tiên để truy xuất tập tin là cuối tập tin vừa mở
t Mở tập tập tin kiểu văn bản
b Mở tập tập tin kiểu nhị phân (binary data)
CÁC CHẾ ĐỘ LÀM VIỆC TRÊN FILE
Trang 21ơ
Trang 23 int chdir( char *s);
char *getcwd( char *s, int n);
int mkdir( char *s);
int rmdir( char *s);
int findfirst( char *path, struct
ffblk *fd, int attrib);
int findnext( struct ffblk *fd);
CÁC HÀM THAO TÁC THƯ MỤC
Trang 24FILE *in_file, *out_file;
Trang 25out_file = fopen (out_name, "w" );
if ( out_file == NULL )
printf( “Can't open” );
else {
VÍ DỤ MINH HỌA
Trang 26VÍ DỤ MINH HỌA
Trang 27www.uit.edu.vn