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

Từ truy hồi đến hàm Fibonacci, Lucas, Pell

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

Hai cơ sở phải xuất hiện trước lời gọi tiếp

Đầu vào của hàm là n nguyên không âm. Với n=0 hoặc n=1, hàm trả kết quả trực tiếp; với n≥2, hàm dùng hai giá trị trước. ```python def fibonacci(n): if n == 0: return 0 if n == 1: return 1 return fibonacci(n - 1) + fibonacci(n - 2) ``` Ví dụ fibonacci(3) cần fibonacci(2)+fibonacci(1). Giá trị fibonacci(2)=1+0=1, nên fibonacci(3)=1+1=2. Đây là hàm trả về số, khác hàm chỉ in ở bài trước.

Giữ cấu trúc, thay đúng cơ sở hoặc công thức

Với Lucas, cơ sở là lucas(0)=2 và lucas(1)=1; ở n≥2 trả về lucas(n−1)+lucas(n−2). Với Pell, cơ sở là pell(0)=0 và pell(1)=1; ở n≥2 trả về 2×pell(n−1)+pell(n−2). ```python def pell(n): if n == 0: return 0 if n == 1: return 1 return 2 * pell(n - 1) + pell(n - 2) n = 5 for k in range(n): print(pell(k), end=" ") ``` Đoạn cuối in 0,1,2,5,12 theo các chỉ số 0,1,2,3,4. **In n phần tử đầu** không phải chỉ gọi pell(n); với n=5, pell(5)=29 là một giá trị khác.

Tính được biểu thức vẫn cần return để trả kết quả

Nếu ở hàm fibonacci bỏ return của dòng cuối, gọi fibonacci(2) vẫn tính biểu thức 1+0 nhưng không trả số 1 cho nơi gọi; hàm trả None. Những lời gọi lớn hơn còn có thể lỗi khi cộng với None. Vì vậy, với hàm tính một giá trị, cần kiểm kết quả được trả về ở mọi nhánh. Cách Fibonacci đệ quy trực tiếp còn tính lặp lại một số trường hợp; chẳng hạn fibonacci(4) cần fibonacci(2) ở nhiều nhánh. Mẫu dùng n nhỏ để quan sát, không khẳng định đệ quy luôn nhanh hơn vòng lặp.

Chạy mẫu với cơ sở, giá trị nhỏ và dữ liệu sai

Mở tệp Python mẫu bằng trình soạn thảo đã dùng, chạy với Python3. Mẫu thử nhận n nguyên từ 0 đến 12 để giữ phép tính đệ quy trực tiếp nhỏ; đây là phạm vi của mẫu thử, không phải giới hạn chỉ số của các dãy. Với n=5, cần nhận F(n)=5, L(n)=11, P(n)=29 và năm số Pell đầu0,1,2,5,12. Với n=0, ba giá trị lần lượt0,2,0; phần in các số Pell đầu không có số nào. Nhập chữ hoặc n âm phải được báo dữ liệu không phù hợp trước khi gọi các hàm tính dãy. Nếu kết quả lệch, kiểm cơ sở, hệ số 2 của Pell và giới hạn range(n).

Bài luyện

Với hàm fibonacci trong bài, fibonacci(3) trả về giá trị nào?
Chọn một đáp án

Bài luyện

Chỉ bỏ return ở dòng cuối của hàm fibonacci, giữ nguyên hai cơ sở. Lời gọi fibonacci(2) trả về gì?
Chọn một đáp án

Bài luyện

Đoạn for k in range(5) in pell(k) dùng chỉ số cuối nào?
Chọn một đáp án

Đang học