Lặp (iteration) là gì?
Trong lập trình, lặp (iteration) là việc thực hiện lại một nhóm lệnh, thường bằng vòng lặp, cho đến khi một điều kiện được thỏa mãn hoặc mọi phần tử trong một tập hợp đã được xử lý. Mỗi lượt chạy qua các lệnh được lặp lại cũng được gọi là một lần lặp.
Cập nhật 24 tháng 9, 2026
Một chương trình gửi email nhắc nhở cho 10.000 người dùng không chứa 10.000 bản sao của đoạn code gửi email. Nó chỉ chứa đoạn code đó một lần, bên trong một vòng lặp (loop), và vòng lặp chạy nó một lần cho mỗi người dùng. Mỗi lượt chạy là một lần lặp, và toàn bộ vòng lặp là cách chương trình duyệt qua danh sách người dùng.
Lặp hoạt động thế nào, từng bước
Mọi vòng lặp đều theo cùng một chu trình:
- Kiểm tra. Xét điều kiện của vòng lặp, một giá trị boolean: còn phần tử nào nữa không, hay bộ đếm vẫn nhỏ hơn giới hạn?
- Chạy. Nếu câu trả lời là đúng, chạy thân vòng lặp một lần.
- Cập nhật. Chuyển sang phần tử tiếp theo hoặc thay đổi bộ đếm.
- Lặp lại. Quay về bước 1. Khi kiểm tra cho kết quả sai, chương trình tiếp tục với phần code sau vòng lặp.
Ở đây thân vòng lặp chạy năm lần, mỗi lần lặp cộng số tiếp theo vào tổng đang tích lũy:
iteration 1 total is now 1
iteration 2 total is now 3
iteration 3 total is now 6
iteration 4 total is now 10
iteration 5 total is now 15
Done: 15
Biến total nằm ngoài vòng lặp, nên nó giữ giá trị từ lần lặp này sang lần lặp sau. Mẫu này, một biến được gán trước vòng lặp và cập nhật bên trong nó, được gọi là biến tích lũy (accumulator), và nó xuất hiện trong gần như mọi vòng lặp có tính toán.
Vòng lặp đếm và vòng lặp theo điều kiện
Có hai kiểu lặp. Lặp xác định chạy một số lần biết trước: mỗi phần tử trong danh sách một lần, hoặc mỗi số từ 1 đến 5 một lần. Vòng lặp for của Python được thiết kế cho việc này, thường đi cùng range().
Lặp không xác định lặp lại cho đến khi một điều gì đó xảy ra, và số lượt không biết trước. Vòng lặp while hợp với trường hợp này:
8 years, balance 214.36
Số tiền tăng 10% mỗi năm cần 8 năm để tăng gấp đôi. Chương trình tìm ra điều đó bằng cách lặp, không phải bằng cách giải phương trình. Các hướng dẫn vòng lặp for và vòng lặp while trình bày cả hai trong Python.
Duyệt qua một tập hợp
Phần lớn vòng lặp duyệt qua một tập hợp: các phần tử của một mảng, các ký tự của một chuỗi, các dòng của một tệp. Vòng lặp for của Python đưa cho bạn trực tiếp từng phần tử, còn enumerate() thêm vị trí của nó:
0 apple
1 banana
2 cherry
Ở phía sau, for yêu cầu tập hợp cung cấp một iterator bằng iter(), rồi gọi next() trên nó một lần cho mỗi lần lặp. Bạn có thể tự gọi những hàm này:
red
green
blue
no more items
Nếu không có giá trị mặc định, lần gọi next() thứ tư sẽ gây ra StopIteration. Ngoại lệ đó là tín hiệu để vòng lặp for biết tập hợp đã hết.
Các ngôn ngữ khác viết cùng ý tưởng này theo cách khác. C đếm bằng chỉ số, còn Java và JavaScript cũng có loại vòng lặp đưa cho bạn từng phần tử:
for (int i = 0; i < 3; i++) {
printf("%s\n", colors[i]);
}
for (String color : colors) {
System.out.println(color);
}
for (const color of colors) {
console.log(color);
}
Lặp và đệ quy
Đệ quy là cách còn lại để làm lặp lại một việc: một hàm tự gọi chính nó với phiên bản nhỏ hơn của bài toán, cho đến khi gặp trường hợp có thể trả lời ngay. Mọi thứ viết bằng cách này đều có thể viết bằng cách kia, nhưng chúng hoạt động khác nhau:
| Lặp | Đệ quy | |
|---|---|---|
| Cách lặp lại | Vòng lặp nhảy về điểm bắt đầu | Hàm tự gọi chính nó |
| Khi nào dừng | Điều kiện vòng lặp trở thành sai | Gặp trường hợp cơ sở |
| Bộ nhớ | Như nhau với bất kỳ số lượt nào | Một stack frame cho mỗi lời gọi còn đang mở |
| Lỗi thường gặp | Vòng lặp vô hạn | Tràn stack (RecursionError trong Python) |
| Phù hợp với | Danh sách, bộ đếm, lặp đến khi thỏa điều kiện | Cây, dữ liệu lồng nhau, chia để trị |
Hàng bộ nhớ có ý nghĩa thực tế. Mặc định Python cho phép khoảng 1.000 lời gọi lồng nhau, nên phép cộng đệ quy 5.000 số sẽ thất bại trong khi vòng lặp không gặp vấn đề gì:
5050 5050
12502500
sum_recursive(5000) failed: RecursionError
Mô phỏng đệ quy cho thấy ngăn xếp lời gọi lớn lên và thu nhỏ lại từng bước.
Những lỗi thường gặp
Vòng lặp vô hạn. Một vòng lặp while có điều kiện không bao giờ trở thành sai sẽ chạy mãi cho đến khi bạn dừng chương trình. Nguyên nhân thường gặp là quên bước cập nhật, chẳng hạn bỏ sót count = count - 1.
Lệch một đơn vị. range(1, 5) cho ra 1, 2, 3 và 4, không có 5, vì giá trị cuối bị loại trừ. Một vòng lặp chạy thừa hoặc thiếu một lần vẫn chạy mà không báo lỗi và cho ra kết quả sai, đó là một lỗi logic.
Sửa danh sách trong lúc đang duyệt nó. Xóa phần tử khỏi chính danh sách bạn đang lặp qua sẽ khiến vòng lặp bỏ sót phần tử:
[1, 2, 3]
Một số 2 vẫn còn, vì khi xóa số 2 đầu tiên, số 2 thứ hai bị dồn vào vị trí mà vòng lặp đã đi qua. Hãy tạo một danh sách mới thay vào đó: numbers = [n for n in numbers if n != 2].
Đọc tiếp
Vòng lặp duyệt qua các tập hợp, nên mảng là gì là trang đi kèm tự nhiên, và boolean là gì giải thích các phép kiểm tra đúng hoặc sai quyết định khi nào vòng lặp dừng. Khi một vòng lặp cho kết quả sai mà không có thông báo lỗi, hãy đọc lỗi logic là gì. Để luyện viết vòng lặp, hãy bắt đầu khóa học Python hoặc thử các ví dụ trên trong Python playground.
Câu hỏi thường gặp
Ví dụ về một vòng lặp là gì?
for in ra tên của từng người trong danh sách 100 người dùng sẽ chạy 100 lần lặp, mỗi tên một lần. Một vòng lặp while cứ hỏi mật khẩu cho đến khi người dùng gõ đúng cũng là lặp, dù số lượt không biết trước.Đệ quy và lặp, cái nào tốt hơn?
Nói chung không cái nào tốt hơn. Lặp dùng một lượng bộ nhớ cố định và thường nhanh hơn với việc lặp lại đơn giản, như cộng các phần tử trong danh sách hay đếm. Đệ quy cho code ngắn và rõ hơn với các bài toán vốn có tính đệ quy, như duyệt cây thư mục, nhưng mỗi lần gọi tốn bộ nhớ stack, và đệ quy quá sâu sẽ thất bại trong các ngôn ngữ như Python.
Lặp có giống vòng lặp không?
for hay while, còn lặp là việc lặp lại mà nó thực hiện. Một lượt chạy qua thân vòng lặp cũng được gọi là một lần lặp, nên vòng lặp chạy 5 lần là thực hiện 5 lần lặp.Sprint và iteration khác nhau thế nào?
Trong quản lý dự án phần mềm, một iteration là một khoảng thời gian cố định, thường từ một đến bốn tuần, trong đó nhóm lập kế hoạch, xây dựng và đánh giá một phần phần mềm chạy được. Scrum gọi khoảng thời gian đó là sprint, nên trên thực tế hai từ này có cùng nghĩa. Nghĩa này khác với lặp trong code.
Iterable nghĩa là gì?
for, như list, chuỗi, từ điển, tệp hay range. Trong Python, một đối tượng là iterable nếu iter() tạo được iterator từ nó. Số nguyên không phải iterable, vì vậy for x in 5: gây ra TypeError.