tek4

Đệ quy trong C++

by - September. 25, 2021
Kiến thức
Học
<p>Đệ quy trong C++ l&agrave; một kh&aacute;i niệm cơ bản v&agrave; quan trọng bởi n&oacute; sẽ gi&uacute;p giải quyết cho nhiều vấn đề một c&aacute;ch đơn giản hơn. Trong b&agrave;i viết n&agrave;y, ch&uacute;ng ta sẽ t&igrave;m hiểu về h&agrave;m đệ quy trong C ++ v&agrave; c&aacute;ch hoạt động của n&oacute; c&ugrave;ng với c&aacute;c v&iacute; dụ dẫn chứng.</p> <h2>Đệ quy trong C++</h2> <p>Qu&aacute; tr&igrave;nh m&agrave; một h&agrave;m tự gọi ch&iacute;nh n&oacute; theo một c&aacute;ch gi&aacute;n tiếp hoặc trực tiếp được gọi l&agrave; đệ quy v&agrave; h&agrave;m tương ứng được gọi l&agrave; h&agrave;m đệ quy. Một h&agrave;m A được gọi l&agrave; h&agrave;m đệ quy trực tiếp nếu n&oacute; tự gọi ch&iacute;nh n&oacute; v&agrave; gi&aacute;n tiếp nếu h&agrave;m A gọi một h&agrave;m B, m&agrave; h&agrave;m B gọi h&agrave;m A đ&oacute;.</p> <p>V&iacute; dụ: Đệ quy trực tiếp</p> <pre class="language-cpp"><code>void ham_A(){ //Đoạn m&atilde; ham_A(); }</code></pre> <p>V&iacute; dụ: Đệ quy gi&aacute;n tiếp</p> <pre class="language-cpp"><code>void ham_A(){ ham_B(); } void ham_B() { ham_A(); }</code></pre> <h2>C&aacute;ch hoạt động của h&agrave;m đệ quy</h2> <pre class="language-cpp"><code>void ham_de_quy(){ ham_de_quy(); } int main (){ ham_de_quy(); }</code></pre> <p><img class="aligncenter wp-image-7201 size-full" style="display: block; margin-left: auto; margin-right: auto;" src="https://tek4.vn/wp-content/uploads/2020/12/Capture-155.png" alt="De-quy-trong-C++" width="667" height="464" /></p> <p>H&agrave;m đệ quy sẽ thực hiện li&ecirc;n tiếp cho đến khi một điều kiện n&agrave;o đ&oacute; được thỏa m&atilde;n. Để ngăn chặn việc đệ quy v&ocirc; hạn, c&acirc;u lệnh if ... else (hoặc c&aacute;c c&aacute;ch kh&aacute;c) c&oacute; thể được sử dụng.</p> <p>V&iacute; dụ: T&iacute;nh tổng 10 số tự nhi&ecirc;n đầu ti&ecirc;n</p> <pre class="language-cpp"><code>#include &lt;iostream&gt; using namespace std; int phep_cong(int con_so) { if (con_so &gt; 1) { return (con_so + phep_cong(con_so - 1)); } else { return 1; } } int main() { int so = 10; int ket_qua; ket_qua = phep_cong(so); cout &lt;&lt; ket_qua; return 0; }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>55</code></pre> <p>Trong đoạn m&atilde; b&ecirc;n tr&ecirc;n, h&agrave;m phep_cong() đ&atilde; tự gọi ch&iacute;nh n&oacute;. Tuy nhi&ecirc;n, trong mỗi lần gọi, ch&uacute;ng ta giảm gi&aacute; trị của biến con_so 1 đơn vị. Khi biến n&agrave;y chứa gi&aacute; trị nhỏ hơn 1, h&agrave;m phep_cong () sẽ trả về kết quả.</p> <h2>Ưu điểm của đệ quy trong C++</h2> <ul> <li>N&oacute; gi&uacute;p cho đoạn m&atilde; ngắn gọn v&agrave; r&otilde; r&agrave;ng hơn.</li> <li>H&agrave;m đệ quy được d&ugrave;ng trong c&aacute;c b&agrave;i to&aacute;n li&ecirc;n quan đến cấu tr&uacute;c dữ liệu v&agrave; c&aacute;c thuật to&aacute;n n&acirc;ng cao, chẳng hạn như đồ thị v&agrave; duyệt c&acirc;y.</li> </ul> <h2>Nhược điểm của đệ quy</h2> <ul> <li>Chiếm nhiều kh&ocirc;ng gian ngăn xếp hơn so với một chương tr&igrave;nh v&ograve;ng lặp.</li> <li>N&oacute; mất nhiều thời gian xử l&yacute; hơn.</li> <li>N&oacute; c&oacute; thể rất kh&oacute; trong việc t&igrave;m lỗi lỗi so với một chương tr&igrave;nh v&ograve;ng lặp.</li> </ul> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về đệ quy trong C++. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i mới nhất tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p>