Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa đệ quy và lặp

Đệ quy và lặp lại cả hai thực hiện nhiều lần các hướng dẫn. Đệ quy là khi một câu lệnh trong hàm gọi chính nó lặp đi lặp lại. Lặp lại là khi một vòng lặp liên tục thực thi cho đến khi điều kiện điều khiển trở thành sai. Sự khác biệt chính giữa đệ quy và lặp là một đệ quy là một quá trình, luôn được áp dụng cho một hàm. Lặp lại được áp dụng cho tập hợp các hướng dẫn mà chúng tôi muốn được thực hiện nhiều lần.

Biểu đồ so sánh

Cơ sở để so sánhĐệ quyLặp lại
Căn bảnCâu lệnh trong một thân hàm gọi hàm đó.Cho phép tập lệnh được lặp đi lặp lại.
định dạngTrong hàm đệ quy, chỉ điều kiện kết thúc (trường hợp cơ sở) được chỉ định.Lặp lại bao gồm khởi tạo, điều kiện, thực hiện câu lệnh trong vòng lặp và cập nhật (tăng và giảm) biến điều khiển.
Chấm dứtMột câu lệnh có điều kiện được bao gồm trong phần thân của hàm để buộc hàm trả về mà không thực hiện lệnh gọi đệ quy.Câu lệnh lặp được lặp đi lặp lại cho đến khi đạt được một điều kiện nhất định.
Điều kiệnNếu hàm không hội tụ đến một số điều kiện gọi là (trường hợp cơ sở), nó sẽ dẫn đến đệ quy vô hạn.Nếu điều kiện điều khiển trong câu lệnh lặp không bao giờ trở thành sai, nó sẽ dẫn đến phép lặp vô hạn.
Sự lặp lại vô hạnĐệ quy vô hạn có thể sụp đổ hệ thống.Vòng lặp vô hạn sử dụng chu kỳ CPU liên tục.
Áp dụngĐệ quy luôn được áp dụng cho các hàm.Lặp lại được áp dụng cho các câu lệnh lặp hoặc "vòng lặp".
Cây rơmNgăn xếp được sử dụng để lưu trữ tập hợp các biến và tham số cục bộ mới mỗi khi hàm được gọi.Không sử dụng ngăn xếp.
Trên khôngĐệ quy sở hữu tổng phí của các cuộc gọi chức năng lặp đi lặp lại.Không có chi phí của cuộc gọi chức năng lặp đi lặp lại.
Tốc độChậm trong thực thi.Nhanh chóng thực hiện.
Kích thước của mãĐệ quy làm giảm kích thước của mã.Lặp lại làm cho mã dài hơn.

Định nghĩa đệ quy

C ++ cho phép một hàm gọi chính nó trong mã của nó. Điều đó có nghĩa là định nghĩa của hàm sở hữu một hàm gọi đến chính nó. Đôi khi nó còn được gọi là định nghĩa tròn của người Viking . Tập hợp các biến và tham số cục bộ được sử dụng bởi hàm được tạo mới mỗi khi hàm tự gọi và được lưu trữ ở đầu ngăn xếp. Nhưng, mỗi khi một hàm gọi chính nó, nó không tạo ra một bản sao mới của hàm đó. Hàm đệ quy không làm giảm đáng kể kích thước của mã và thậm chí không cải thiện việc sử dụng bộ nhớ, nhưng nó thực hiện một số khi so sánh với phép lặp.

Để chấm dứt đệ quy, bạn phải bao gồm một câu lệnh chọn trong định nghĩa của hàm để buộc hàm trả về mà không đưa ra lệnh gọi đệ quy cho chính nó. Sự vắng mặt của câu lệnh select trong định nghĩa của hàm đệ quy sẽ cho phép hàm trong đệ quy vô hạn một khi được gọi.

Hãy cho chúng tôi hiểu đệ quy với một hàm sẽ trả về giai thừa của số.

 int factorial (int num) {int answer; if (num == 1) {trả về 1; } other {answer = factorial (num-1) * num; // gọi đệ quy} return (answer); } 

Trong đoạn mã trên, câu lệnh trong phần khác cho thấy đệ quy, vì câu lệnh gọi hàm giai thừa () mà nó nằm trong đó.

Định nghĩa lặp

Lặp lại là một quá trình thực hiện lặp lại tập hợp các hướng dẫn cho đến khi điều kiện trong câu lệnh lặp trở thành sai. Câu lệnh lặp bao gồm việc khởi tạo, so sánh, thực hiện các câu lệnh bên trong câu lệnh lặp và cuối cùng là cập nhật biến điều khiển. Sau khi biến điều khiển được cập nhật, nó được so sánh lại và quá trình lặp lại, cho đến khi điều kiện trong câu lệnh lặp lại là sai. Các câu lệnh lặp đi lặp lại là vòng lặp cho các vòng lặp, các vòng lặp, trong khi đó

Câu lệnh lặp không sử dụng ngăn xếp để lưu trữ các biến. Do đó, việc thực hiện câu lệnh lặp nhanh hơn so với hàm đệ quy. Ngay cả hàm lặp cũng không có chi phí gọi hàm lặp lại, điều này cũng làm cho việc thực thi của nó nhanh hơn hàm đệ quy. Lặp lại được chấm dứt khi điều kiện điều khiển trở thành sai. Việc không có điều kiện điều khiển trong câu lệnh lặp có thể dẫn đến một vòng lặp vô hạn hoặc nó có thể gây ra lỗi biên dịch.

Hãy hiểu lặp đi lặp lại về ví dụ trên.

 int factorial (int num) {int answer = 1; // cần khởi tạo vì nó có thể chứa giá trị rác trước khi khởi tạo cho (int t = 1; t> num; t ++) // iteration {answer = answer * (t); trả lại (trả lời); }} 

Trong đoạn mã trên, hàm trả về giai thừa của số bằng cách sử dụng câu lệnh lặp.

Sự khác biệt chính giữa đệ quy và lặp

  1. Đệ quy là khi một phương thức trong một chương trình liên tục gọi chính nó trong khi đó, lặp lại là khi một tập hợp các lệnh trong một chương trình được thực thi lặp lại.
  2. Phương thức đệ quy chứa tập lệnh, lệnh gọi chính nó và điều kiện kết thúc trong khi câu lệnh lặp chứa khởi tạo, tăng, điều kiện, tập lệnh trong vòng lặp và biến điều khiển.
  3. Một câu lệnh có điều kiện quyết định chấm dứt đệ quy và giá trị của biến điều khiển quyết định chấm dứt câu lệnh lặp.
  4. Nếu phương thức không dẫn đến điều kiện kết thúc, nó đi vào đệ quy vô hạn. Mặt khác, nếu biến điều khiển không bao giờ dẫn đến giá trị kết thúc thì câu lệnh lặp lặp lại vô hạn.
  5. Đệ quy vô hạn có thể dẫn đến sự cố hệ thống trong khi đó, việc lặp lại vô hạn sẽ tiêu tốn chu kỳ CPU.
  6. Đệ quy luôn được áp dụng cho phương thức trong khi đó, phép lặp được áp dụng cho tập lệnh.
  7. Các biến được tạo trong quá trình đệ quy được lưu trữ trên stack trong khi đó, phép lặp không yêu cầu ngăn xếp.
  8. Đệ quy gây ra tổng phí của việc gọi hàm lặp đi lặp lại trong khi đó, phép lặp không có chức năng gọi qua đầu.
  9. Do chức năng gọi thực hiện đệ quy trên đầu chậm hơn trong khi thực thi lặp lại nhanh hơn.
  10. Đệ quy làm giảm kích thước của mã trong khi đó, việc lặp lại làm cho mã dài hơn.

Phần kết luận:

Hàm đệ quy rất dễ viết, nhưng chúng không hoạt động tốt so với phép lặp trong khi đó, phép lặp khó viết nhưng hiệu suất của chúng tốt so với đệ quy.

Top