Menu
CoddyTech

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.

Tác giả Kevin Spektor, Co-founder & CTO

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:

  1. 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?
  2. Chạy. Nếu câu trả lời là đúng, chạy thân vòng lặp một lần.
  3. Cập nhật. Chuyển sang phần tử tiếp theo hoặc thay đổi bộ đếm.
  4. 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ạiVòng lặp nhảy về điểm bắt đầuHàm tự gọi chính nó
Khi nào dừngĐiều kiện vòng lặp trở thành saiGặp trường hợp cơ sở
Bộ nhớNhư nhau với bất kỳ số lượt nàoMột stack frame cho mỗi lời gọi còn đang mở
Lỗi thường gặpVòng lặp vô hạnTràn stack (RecursionError trong Python)
Phù hợp vớiDanh sách, bộ đếm, lặp đến khi thỏa điều kiệnCâ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ì?
Một vòng lặp 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?
Gần như vậy. Vòng lặp là cấu trúc của ngôn ngữ, như 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ì?
Iterable là bất kỳ đối tượng nào bạn có thể duyệt qua bằng 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.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu