Thông tin tài liệu
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ập tin để đọc Mở tập tin để ghi Mở để ghi thêm thông tin vào đó Vị trí đầu tiên để truy xuất tập tin là cuối tập tin vừa mở Mở một tập tin ở cả hai chế độ ghi đọc Vị trí đầu tiên để truy xuất tập tin là đầu tập tin vừa mở Mở một tập tin ở cả hai chế độ ghi đọc 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ở Mở tập tậ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ẬP TIN 16 NỘI DUNG BÀI TẬP TIN Khái niệm Các thao tác trên Tập Tin. .. trên Tập Tin 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ẬP TIN 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: Tin học đại cương 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)... 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ậ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... vừa mở Mở tập tập tin kiểu văn bản Mở tập tập tin 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
Ngày đăng: 17/02/2014, 01:20
Xem thêm: Tài liệu Tin học đại cương - bài 11: đệ quy tập tin docx, Tài liệu Tin học đại cương - bài 11: đệ quy tập tin docx