Kỹ thuật lậptrình :: Bàithựchànhsố :: Lậptrìnhđệquyvới cấu trúc liệu danhsách đặc Mục tiêu: Diễn đạt thực tác vụ hướng đệquyĐệquyvới cấu trúc liệu danhsách đặc So sánh thời gian thực tác vụ danhsách đặc(array) với kỹ thuật duyệt đệquy Vấn đề 4: Lãi suất kép Ngân hàng A có lãi suất cố định x% Đem khoản tiền y gửi vào ngân hàng A khoảng thời gian n năm Tính số tiền thu (vốn + lãi) Yêu cầu: Gọi P(n) số tiền thu sau n năm gửi số tiền y vào A Lập cơng thứcđệquy tính P(n) Cài đặt hàm đệquy float lai_kep(float y, int n); trả số tiền thu sau n năm Cài đặt chương trìnhthực vấn đề hàm int main(); để kiểm tra tính thực nghiệm Nhập liệu hợp lệ cho n y Hiển thị giá trị P(n) hình tương ứng với liệu vào n y từ phím Test: Input Output n=0 y=0 n=1 y =10 n = 104 y =10 n = 106 y =10 Vấn đề : Đệquy mảng Dãy Q gồm n số ngun khơng có thứ tự Q lưu trữ nhớ mảng int Q[n] Yêu cầu: Cài đặt hàm void input(int Q[], int &n) để sinh ngẫu nhiên n phần tử (1≤n≤10 6) lưu vào mãng Q[] Cài đặt hàm void output(int Q[], int n) để hiển thị phần tử Q[] lên hình Dưới gợi ý xây dựng định nghĩa đệquyđể tính tổng n phần tử dãy Q Sum(q,n) = q[0] + q[1] + q[2] + + q[n-2] +q[n-1] Sum(q,n-1) Cài đặt hàm long sum_rec(int Q[], int n) trả tổng phần tử dãy số Q kỹ thuật đệquy mô tả Page 1/2 Kỹ thuật lậptrình :: Bàithựchànhsố :: Lậptrìnhđệquyvới cấu trúc liệu danhsách đặc Dưới gợi ý để xây dựng định nghĩa đệquy tìm phần tử lớn mảng Q Điều kiện biên: Mảng phần tử trị lớn q[0] Giải thuật chung: o Max(q,n) = q[0] , q[1] , q[2] , , q[n-2] , q[n-1] o Max(q,n-1) o Cài đặt hàm int max_rec(int Q[], int n) trả giá trị lớn dãy số Q kỹ thuật đệquy mô tả 10 Định nghĩa đệquy cho tác vụ tìm phần tử có giá trị nhỏ dãy số Q Từ cài đặt hàm int min_rec(int Q[], int n) trả giá trị bé dãy số Q kỹ thuật đệquy 11 Cài đặt hàm long sum(int Q[], int n) trả tổng phần tử dãy số Q phương pháp duyệt mảng Q 12 Cài đặt chương trìnhthực vấn đề hàm int main(); Tạo dãy số Q gồm n số cách sinh ngẫu nhiên (1≤n≤100) Hiển thị phần tử dãy Q Hiển thị phần tử lớn nhỏ dãy Q Tạo dãy số Q gồm n phần tử cách sinh ngẫu nhiên (104≤n≤109) Thực tính tổng Q theo hai cách Đệquy Không đệquyso sánh thời gian thực giải thuật với liệu Q(n) Lập báo cáo theo mẫu sau: sum sum_rec n=104 …(s) …(s) n=105 …(s) …(s) n=106 …(s) …(s) n=107 …(s) …(s) n=109 …(s) …(s) Đoạn chương trình hướng dẫn kỹ thuật đo thời gian: #include #include #include using namespace std; long sum_rec(int Q[], int n) ; long sum(int Q[], int n); int main() { int n = 10000;//10^4, 10^5, 10^6, clock_t start= clock(); sum(n); clock_t end = clock(); //Đo thời gian không đq cout