Dừng trước khi đọc phần tử
Dùng k làm chỉ số cần in, bắt đầu từ len(A)−1. Sau khi in A[k], gọi tiếp với k−1; khi k<0 thì kết thúc.
```python
def in_nguoc(A, k):
if k < 0:
return
print(A[k], end=" ")
in_nguoc(A, k - 1)
```
Lời gọi là in_nguoc(A,len(A)−1). Với A=[9,4,7], các chỉ số được đọc là2,1,0, nên in 7,4,9. Lời gọi tiếp với k=−1 dừng trước print; không đọc A[−1] thêm một lần.
In ngược không tự đảo nội dung dãy
Nếu A=[], chỉ số bắt đầu là−1 và hàm kết thúc ngay, không đọc phần tử nào. Đặt print(A[k]) trước kiểm cơ sở sẽ làm trường hợp rỗng bị lỗi.
Hàm chỉ đọc các phần tử để in theo thứ tự ngược; sau khi chạy với [9,4,7], A vẫn là [9,4,7]. Hàm không tạo hay trả một dãy đảo mới; nếu gán kết quả lời gọi thì nhận None.
Bài luyện
Sau in_nguoc(A,len(A)-1) với A=[9,4,7], kết luận nào đúng?
Điều kiện dừng là k<0, không phải k khác0.
Hàm chỉ đọc dãy theo chỉ số giảm dần.
Thứ tự in đang đi từ chỉ số cuối về đầu.
Không có lệnh gán đổi thứ tự phần tử.
Lời giải
Hàm đọc A[2], A[1], A[0] nên in 7,4,9. Không có lệnh thay các phần tử của A, vì vậy nội dung dãy vẫn [9,4,7].
Bài luyện
Với A=[], tại sao phải kiểm k<0 trước print(A[k]) trong hàm trên?
Print không tự thêm phần tử.
Dãy rỗng không chứa phần tử0.
Len(A)−1=−1 và không có phần tử để đọc.
Chỉ số âm chỉ dùng được khi có phần tử tương ứng trong dãy.
Lời giải
Khi A rỗng, k=−1 nên nhánh cơ sở phải kết thúc hàm. Nếu đọc A[k] trước đó thì truy cập một phần tử không tồn tại và gây lỗi.
Đang học