btvn.vn
Tìm kiếm Đăng nhập

Tính đa thức bằng đệ quy

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Đệ quy · Chọn bài khác

Chỉ số hệ số ứng với số mũ

Danh sách A=[a0,a1,...,an] lưu hệ số theo **số mũ tăng dần**. A[0] là hệ số tự do, A[1] đi với x, A[2] đi với $x^2$. Ví dụ A=[2,−3,4] biểu diễn $F(x)=2-3x+4x^2$. Tại x=2, giá trị là $2-3\times2+4\times2^2=12$. Không đọc A theo thứ tự hệ số của cách viết $4x^2-3x+2$ từ trái sang phải, vì quy ước danh sách đã gắn chỉ số với số mũ.

Bớt hạng tử có số mũ lớn nhất đang xét

F(A,x,k) tính phần đa thức từ hệ số A[0] tới A[k]. Điều kiện là A không rỗng và 0≤k<len(A). Với k=0, chỉ còn hệ số tự do A[0]. Với k>0, cộng hạng tử $A[k]x^k$ vào kết quả phần trước: ```python def F(A, x, k): if k == 0: return A[0] return A[k] * (x ** k) + F(A, x, k - 1) ``` Gọi `F(A,x,len(A)-1)`. Với A=[2,−3,4] và x=2: | k | Kết quả phần đa thức | |---|---| | 0 | 2 | | 1 | −3×2+2=−4 | | 2 | 4×4+(−4)=12 | Khi x=0, kết quả là A[0]. Khi A chỉ có một hệ số, hàm trả ngay hệ số ấy ở mọi x. Dãy hệ số rỗng phải được chặn trước lời gọi; không có A[0] để dùng cơ sở.

Chạy bộ thực hành và đối chiếu kết quả

Tải mã luyện tập, mở terminal tại thư mục chứa tệp và chạy bằng Python3: ```text python3 g11-cs-luyen-tap-de-quy.py 13 ``` Cần nhận xâu nhị phân 1101, danh sách [1,1,0,1] và giá trị đổi lại 13. Tệp có hàm decimal(s,n) tính giá trị n kí tự đầu theo công thức đã học; bộ mẫu dùng nó trên xâu 0/1 hợp lệ vừa tạo. Dãy [4,1,4,2] phải giữ nguyên sau khi đếm; hai bản đếm đều cho 3. Đa thức hệ số [2,−3,4] tại x=2 phải cho 12. Chạy lại với 0 để kiểm xâu `'0'`, danh sách [0] và giá trị đổi lại 0. Mẫu nhận n từ 0 đến 4095 để giữ dữ liệu thử nhỏ; nhập số âm, chữ hoặc số ngoài mẫu phải báo lỗi. Phần sắp xếp chèn dùng lại hàm sap_xep_chen trong tệp thiết kế đệ quy đã có: thử A=[4,1,4,2], gọi với k=len(A)−1, cần nhận A=[1,2,4,4]. Thử thêm rỗng, một phần tử, đã xếp và thứ tự giảm. Đây là thao tác sửa A tại chỗ; đếm nghịch đảo của dữ liệu gốc trước khi sắp xếp nếu cần giữ kết quả đếm. Đệ quy giúp cách viết bám sát quy tắc dùng bài toán nhỏ hơn, như chuyển chồng đĩa hoặc tổng hợp phần đầu. Tuy nhiên, chương trình có chi phí gọi hàm và giới hạn độ sâu; những phần tính lặp lại cũng có thể làm tăng công việc. Cần xét thuật toán và dữ liệu cụ thể khi so sánh với vòng lặp, thay vì kết luận tốc độ chỉ từ độ ngắn của mã.

Bài luyện

Với quy ước hệ số trong bài, A=[2,−3,4] biểu diễn đa thức nào?
Chọn một đáp án

Bài luyện

F([2,−3,4],2,2) trong bài trả về bao nhiêu?
Chọn một đáp án

Bài luyện

Vì sao F(A,x,0) trả A[0] khi A không rỗng?
Chọn một đáp án

Đang học