Giải chuyên đề KHMT 11 kết nối: Bài 2 Thiết kế thuật toán bằng đệ quy
Hướng dẫn giải chuyên đề Khoa học máy tính 11 kết nối tri thức: Giải bài 2 Thiết kế thuật toán bằng đệ quy. Bài được giải chi tiết, rõ ràng, dễ hiểu. Bài giải giúp học sinh nắm vững kiến thức trong sách giáo khoa, rèn kĩ năng giải bài tập và có phương pháp học tập hiệu quả.
Nội dung chi tiết
Khởi động
Câu hỏi. An được giao tìm một thiết kế mới cho bài toán tính tổng Sín) = 1 +2 +... +n. An nhận thấy S(n) có thế được viết như sau: S(n-1)= 1+2+..+n = 1+2+...+ n - 1 + n = S(n - 1) + n. Do đó, việc tính S(n) có thể được tính từ S(n - 1), tương tự S(n - 1) lại có thể được tính từ S(n - 2), cứ như vậy, cuối cùng sẽ dẫn đến cần tính S(0), nhưng S(0) = 0.
Em có thể giúp An hoàn thiện ý tưởng trên thành một chương trình hay không?
Giải chi tiết:
- B1. Bài toán yêu cầu tính tổng n số nguyên từ 1 đến n. Cần thiết lập hàm S(n) trả về giá trị cần tìm.
- B2. Điều kiện n>0
- B3. Công thức truy hồi của hàm S(n)
1. Ý tưởng thiết kế theo đệ quy
Câu hỏi 1. Hãy chỉ ra phần cơ sở và phần đệ quy của các chương trình trên.
Giải chi tiết:
Thuật toán 1
- Phần cơ sở: return 0
- Phần đệ quy: if n == 0, else
Thuật toán 2
- Phần cơ sở:return 1/ return a*exp(a, n-1)
- Phần đệ quy: if n == 0, else
Thuật toán 3
- Phần cơ sở: return 1/ return a*giaithua (n-1)
- Phần đệ quy: if n == 0, else
Câu hỏi 2. Vì sao trong ý tưởng thiết kế đệ quy trên, yêu cầu từ bài toán với kích thước lớn cần phải đưa về cùng bài toán đó với kích thước nhỏ hơn?
Giải chi tiết:
- Ý tưởng chính của kĩ thuật đệ quy là biến đổi bài toán ban đầu về bài toán với kích thước nhỏ hơn. Nếu bài toán có kích thƯớc nhỏ có thể giải được thì có thể thiết lập lời giải đệ quy cho bài toán này. Lời giải của các bài toán sờ dụng đệ quy thường ngắn gọn và dễ hiểu.
2. Thuật toán tìmkiếm nhị phân
Câu hỏi 1. Nêu ý tưởng chính của giải thuật tìm kiếm nhị phân sử dụng đệ quy.
Giải chi tiết:
Do tính chất mảng đã sắp xếp, công việc tìm kiếm phần tử x có thể triển khai như sau:
- Xét đoạn mảng arr[left…right] cần tìm kiếm phần tử x. Ta so sánh x với phần tử ở vị trí giữa của mảng(mid = (left + right)/2). Nếu:
- Nếu phần tử arr[mid] = x. Kết luận và thoát chương trình.
- Nếu arr[mid] < x. Chỉ thực hiện tìm kiếm trên đoạn arr[mid+1…right].
- Nếu arr[mid] > x. Chỉ thực hiện tìm kiếm trên đoạn arr[left…mid-1].
Câu hỏi 2. Vị trí nào trong thuật toán có thể gợi ý cho kĩ thuật đệ quy?
Giải chi tiết:
- Khi đưa bài toán tìm kiếm về chính bài toán đó
Câu hỏi 3. Phần cơ sở của thiết kế đệ quy nằm ở bước nào?
Giải chi tiết:
- Bước 3 đóng vai trò phần cơ sở đệ quy, khi độ dài của dãy cần tìm kiếm bằng 0 thì chương trình sẽ dừng lại và thông báo không tìm thấy
Câu hỏi 4. Nêu ý tưởng chính của giải thuật tìm kiếm nhị phân sử dụng đệ quy.
Giải chi tiết:
Tìm kiếm nhị phân chỉ có thể cài đặt trong một mảng đã được sắp xếp. Nếu mảng đó chưa được sắp xếp, hãy sắp xếp nó trước trước khi cài đặt thuật toán.
Có 2 cách để cài đặt thuật toán Tìm kiếm nhị phân:
- Sử dụng vòng lặp
- Sử dụng đệ quy
Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng đệ quy để cài đặt thuật toán. Phương pháp đệ quy này tuân theo nguyên tắc “chia để trị” gồm những bước như sau:
- Bước 1: Khởi tạo mảng và sắp xếp các phần tử trong mảng (theo thứ tự bé đến lớn) và mình chọn phần tử x = 4 là phần tử cần được tìm kiếm.
- Bước 2: Đặt 2 con trỏ low và high ở vị trí đầu và cuối của mảng tương ứng với phần tử nhỏ nhất và phần tử lớn nhất của mảng.
- Bước 3: Tìm phần tử ở giữa mảng mid = (low + high) / 2.
- Bước 4: Nếu x = arr[mid] thì trả về mid, nếu không ta tiếp tục so sánh.
- Bước 5: Nếu x > arr[mid], so sánh x với các phần tử ở phía bên phải của mid bằng cách thay low = mid + 1.
- Bước 6: Nếu x < arr[mid], so sánh x với các phần tử ở phía bên trái của mid bằng cách thay high = mid – 1.
- Bước 7: Lặp lại từ bước 3 đến bước 6 cho đến khi con trỏ low gặp high.
- Bước 8: Và cuối cùng phần tử x = 4 đã được tìm thấy.
Câu hỏi 1. Trong chương trình trên lệnh nào đóng vai trò là phần cơ sở của đệ quy?
Giải chi tiết:
- Lệnh if và else if
Câu hỏi 2. Giả sử A = [1. 3. 7, 9] và K = 10. Nếu áp dụng chương trình trên thì cần mấy lần gọi hàm đệ quy?
Giải chi tiết:
- Cần 5 lần gọi hàm đệ quy
Luyện tập
Câu hỏi 1. Viết chương trình theo kĩ thuật đệ quy để tính hàm SL(n) là tổng các số tự nhiên lẻ nhỏ hơn hoặc bằng n.
Giải chi tiết:
//Viết chương trình tính tổng các giá trị lẻ nguyên dương nhỏ hơn N
#include <stdio.h>
int main() {
//khai báo biến n là số nguyên dương và sum = 0 là tổng các số lẻ từ 1 đến n
int n, sum = 0;
//sử dụng printf() và scanf() để yêu cầu người dùng nhập vào số nguyên n
printf("\nNhập vào số nguyên dương n: ");
scanf("%d", n);
//sử dụng vòng lặp for lặp từ 1 đến n với bước nhảy là i += 2 để lấy các số lẻ
for(int i = 1; i < n; i +=2){
//cứ sau mỗi vòng lặp thì sum = sum + i
sum = sum + i;
}
//sử dụng vòng lặp while để tính
// int i = 1;
// while(i < n){
// sum += i;
// i += 2;
// }
//hiển thị sum ra màn hình
printf("\nTổng các số lẻ từ 1 đến %d là: %d", n, sum);
printf("\n--------------------------------------\n");
printf("Chương trình này được đăng tại Freetuts.net");
}
Câu hỏi 2. Cho trước dãy A, Viết chương trình đệ quy để in dãy A theo thứ tự ngược lại.
Giải chi tiết:
#include<stdio.h>
int main(){
int num,reverse_number;
//User nhap so can dao nguoc
printf("\nNhap mot so bat ki:");
scanf("%d", num);
//Goi ham de quy
reverse_number = reverse_function(num);
printf("\nSau khi dao nguoc :%d", reverse_number);
return 0;
}
int reverse_function(int num){
int sum = 0, rem;
if(num){
rem = num % 10;
sum = (sum*10) + rem;
reverse_function(num/10);
}
else
return sum; // điều kiện dừng
return sum;
}
Vận dụng
Câu 1. Viết chương trình tính tổng S = 1! + 2! +... + n! theo hai cách:
a) Không sử dụng đệ quy.
b) Có sử dụng kĩ thuật đệ quy.
Giải chi tiết:
a)
Viết chương trình tính tổng S = 1! + 2! +... + n! theo hai cách:
Tài liệu cùng môn học
- Trắc nghiệm khoa học máy tính 11 kết nối tri thức
- Giáo án word tin học khoa học máy tính 11 kết nối tri thức
- Giáo án ppt tin học khoa học máy tính 11 kết nối tri thức
- Giáo án chuyên đề tin học khoa học máy tính 11 kết nối tri thức
- Giáo án ppt chuyên đề tin học khoa học máy tính 11 kết nối tri thức
- Giải tin học khoa học máy tính 11 kết nối tri thức
- Phiếu bài tập tin học khoa học máy tính 11 kết nối tri thức
- Lý thuyết khoa học máy tính 11 kết nối tri thức
- Bài tập củng cố Khoa học máy tính 11 kết nối tri thức
- Trắc nghiệm trả lời ngắn khoa học máy tính 11 kết nối tri thức
- Trắc nghiệm đúng sai khoa học máy tính 11 kết nối tri thức
- Đề thi tin học khoa học máy tính 11 kết nối tri thức
- Giải chuyên đề khoa học máy tính 11 kết nối tri thức
- Ppt trò chơi AI Tin học KHMT 11 Kết nối tri thức
- Ppt trò chơi AI Tin học 11 Khoa học máy tính Kết nối tri thức
- Video AI mở đầu Tin học 11 Khoa học máy tính Kết nối tri thức
Tài liệu khác
- Trắc nghiệm văn 11 kết nối tri thức
- Trắc nghiệm địa lí 11 kết nối tri thức
- Trắc nghiệm hóa học 11 kết nối tri thức
- Trắc nghiệm KTPL 11 kết nối tri thức
- Trắc nghiệm lịch sử 11 kết nối tri thức
- Trắc nghiệm sinh học 11 kết nối tri thức
- Trắc nghiệm toán 11 kết nối tri thức
- Trắc nghiệm quốc phòng 11 kết nối tri thức
- => Xem nhiều môn hơn