Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
609 KB
Nội dung
1
TIN HỌC ĐẠI CƯƠNG
www.uit.edu.vn
BÀI 11
BÀI 11
ĐỆ QUY
ĐỆ QUY
TẬP TIN
TẬP TIN
Tin học đại cương
2
ĐỆ QUY
11
NỘI DUNG
NỘI DUNG
Tin học đại cương
3
Khái niệm
Phân loại các hàm đệ qui:
Đệ qui tuyến tính
Đệ qui nhị phân
Đệ qui hỗ tương
Đệ qui phi tuyến
NỘI DUNG BÀIĐỆ QUY
NỘI DUNG BÀIĐỆ QUY
Tin học đại cương
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
ĐIỀU KIỆN DỪNG
Tin học đại cương
5
Đệ qui Lặp
Sử 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
Tuy nhiên, có nhiều bài toán có thể giải bằng
đệ qui lại tốt hơn (các bài toán cổ điển: tháp
Hà Nội, mã đi tuần, 8 hậu, sắp xếp
QuickSort…)
SO SÁNH ĐỆQUY VÀ LẶP
SO SÁNH ĐỆQUY VÀ LẶP
Tin học đại cương
6
Đệ qui tuyến tính
Đệ qui nhị phân
Đệ qui hỗ tương
Đệ qui phi tuyến
PHÂN LOẠI CÁC DẠNG ĐỆ QUY
PHÂN LOẠI CÁC DẠNG ĐỆ QUY
Tin học đại cương
7
Một hàm được gọi là đệ qui tuyến tính khi nó có
dạng:
<KDL> < tên hàm>
{
if < điều kiện dừng >
{
/*Trả về giá trị
hay kết thúc công việc */
}
else
{
/*Làm một số công việc */
/*Gọi đệ qui đến hàm <tên hàm> */
}
}
ĐỆ QUY TUYẾN TÍNH
ĐỆ QUY TUYẾN TÍNH
Tin học đại cương
8
Viết hàm đệ qui tính x
n
, n nguyên dương.
Điều kiện dừng: nếu n=0 thì x
0
=1.
Tổng quát: x
n
=x
n-1
*x.
float xn(float x, int n)
{
if (n==0)
return 1;
else
return xn(x,n-1)*x;
}
VÍ DỤ VỀ ĐỆQUY TUYẾN TÍNH
VÍ DỤ VỀ ĐỆQUY TUYẾN TÍNH
Tin học đại cương
9
Một hàm được gọi là đệ qui nhị phân khi nó có dạng:
<KDL> < tênhàm>
{
if < điều kiện dừng >
/*Trả về gtrị hay kthúc công việc */
else
{
/*Làm một số công việc */
/*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
ĐỆ QUY NHỊ PHÂN
Tin học đại cương
10
Viết hàm đệ qui tính số hạng thứ n của dãy fibo.
F0=F1=1
Fn=Fn-1+Fn-2
Đ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
VÍ DỤ VỀ ĐỆQUY NHỊ PHÂN
[...]... r+ Tin học đại cương w+ a+ t b Mở tậptinđể đọc Mở tậptinđể ghi Mở để ghi thêm thông tin vào đó Vị trí đầu tiên để truy xuất tậptin là cuối tậptin vừa mở Mở một tậptin ở cả hai chế độ ghi đọc Vị trí đầu tiên để truy xuất tậptin là đầu tậptin vừa mở Mở một tậptin ở cả hai chế độ ghi đọc Tậptin được mở để ghi và đọc Vị trí đầu tiên để truy xuất tậptin là cuối tậptin vừa mở Mở tậptập tin. .. VỀ ĐỆQUY HỖ TƯƠNG Tin học đại cương /* Prototype */ unsigned long TinhY(int n); unsigned long TinhX(int n); /* Implementation */ unsigned long TinhY(int n) { if (n==0) return 1; return TinhX(n-1) + TinhY(n-1); } unsigned long TinhY(int n) { if (n==0) return 1; return n*n*TinhX(n-1) + TinhY(n-1); } 15 NỘI DUNG Tin học đại cương 12 TẬPTIN 16 NỘI DUNG BÀITẬPTIN Khái niệm Các thao tác trên Tập Tin. .. trên TậpTin Các hàm Nhập Xuất Các hàm di chuyển Con Trỏ tập tin Tin học đại cương Các hàm quản lý Thư Mục 17 KHÁI NIỆM TẬPTIN Tậptin là một loại dữ liệu có thể ghi lên đĩa để dùng nhiều lần Có 2 loại tập tin: Tin học đại cương Tậptin văn bản (text file, ASCII file): *.PAS, *.C, … (các tậptin mã nguồn chương trình) Mỗi tậptin văn bản gồm nhiều dòng Mã ngăn cách dòng (chuyển dòng khác)... i0; Tin học đại cương Xây dựng: int x(int n) { if (n==0)... Đọc hay ghi thông tin lên file (fread, fscanf, fwrite, fprintf) Đóng file (fclose) Có các hàm làm việc với tậptin thông qua con trỏ tậptin FILE *pf; Con trỏ này được xác định khi ta mở tậptin 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... vừa mở Mở tậptậptin kiểu văn bản Mở tậptậptin kiểu nhị phân (binary data) 20 CÁC HÀM NHẬP XUẤT int int int int putc (int ch, FILE *f); fputc(int ch, FILE *f); getc (FILE *f); fgetc(FILE *f); int fputs (const char *s, FILE *f); char *fgets(const char *s, int n, FILE *f); int fprintf(FILE *f, const char *dac_ta, ); fscanf (FILE *f, const char *dac_ta, ); Tin học đại cương int putw(int n, FILE... *f); int fseek(FILE *f, long so_byte, int vi_tri_bat_dau); Tin học đại cương long ftell(FILE *f); 22 CÁC HÀM THAO TÁC THƯ MỤC Tin học đại cương 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); 23 Tin học đại cương VÍ DỤ MINH HỌA #include void main()... copied:\n"); gets("%s", in_name); printf("Output filename:\n"); gets("%s", out_name); 24 Tin học đại cương VÍ DỤ MINH HỌA in_file = fopen ( in_name, "r"); if( in_file == NULL ) printf(“Cannot open”); else { out_file = fopen (out_name, "w"); if( out_file == NULL ) printf(“Can't open”); else { 25 VÍ DỤ MINH HỌA Tin học đại cương c =getc(in_file); while(c!= EOF ) putc(c, out_file); /* copy EOF */ putc .
1
TIN HỌC ĐẠI CƯƠNG
www.uit.edu.vn
BÀI 11
BÀI 11
ĐỆ QUY
ĐỆ QUY
TẬP TIN
TẬP TIN
Tin học đại cương
2
ĐỆ QUY
11
NỘI DUNG
NỘI DUNG
Tin học đại cương
3
Khái. BÀI TẬP TIN
NỘI DUNG BÀI TẬP TIN
Tin học đại cương
18
Tập tin là một loại dữ liệu có thể ghi lên đĩa để
dùng nhiều lần.
Có 2 loại tập tin:
Tập tin