01/10/2018, 09:13

Thắc mắc về đệ quy

Hiện tại em là sinh viên năm 1 em đã học được các ngôn ngữ như HTML,CSS,C…đến nay thì đang học C++, nhưng thấy cái đệ quy nó trừu tượng e vẫn chưa hiểu rõ nó được.Nếu em phát triển theo hướng dev web thì cái đệ qui nó quan trọng với cái hướng đi của em không ?
Cảm ơn đã xem

rogp10 viết 11:26 ngày 01/10/2018

Bạn làm cho duyệt đc cây là xong.

Mr.Fish viết 11:25 ngày 01/10/2018

Ý bác là cây tìm kiếm nhị phân ?

Trần Hoàn viết 11:23 ngày 01/10/2018

Đệ quy tức là một hàm gọi chính nó thôi mà, có gì mà khó hiểu?

Mr.Fish viết 11:25 ngày 01/10/2018

Nếu e đi theo hướng web thì nó quan trọng không anh ?

NG viết 11:14 ngày 01/10/2018

Cám ơn bác giờ em mới hiểu từ đệ quy là gì. Dùng bao năm mà chưa biết tên em nó

vi.wikipedia.org

Đệ quy

Đệ quy (tiếng Anh: recursion) là phương pháp dùng trong các chương trình máy tính trong đó có một hàm tự gọi chính nó. Trong toán học và khoa học máy tính, các tính chất (hoặc cấu trúc) được gọi là đệ quy nếu trong đó một lớp các đối tượng hoặc phương pháp được xác định bằng việc xác định một số rất ít các trường hợp hoặc phương pháp đơn giản (thông thường chỉ một) và sau đó xác định quy tắc đưa các trường hợp phức tạp về các trường hợp đơn giản. Chẳng hạn, định nghĩa sau là định nghĩa đệ quy c...

Cái này cần thiết trong mọi ngôn ngữ lập trình bác à, nó chỉ là một cách viết thuật toán để lập trình thôi, thay vì viết đệ quy, bác vẫn có cách khác để viết 1 chương trình cùng chức năng nhưng có lúc viết đệ quy nó đơn giản hơn.

int factorial(n) 
 {
   if (n <= 1)
     return 1;
   else
     return n * factorial(n-1);
 }
Trần Hoàn viết 11:22 ngày 01/10/2018

Nếu bạn chỉ ngồi “vẽ” html, css cho các trang web doanh nghiệp, blog… thì không cần
Còn nếu theo hướng lập trình thì cần

Mr.Fish viết 11:13 ngày 01/10/2018

Cảm ơn bác em hình dung ra được rồi

Mr.Fish viết 11:26 ngày 01/10/2018

Còn muốn tiến lên back-end thì sao bác ?

Trần Hoàn viết 11:17 ngày 01/10/2018

back-end thì cũng là lập trình mà
Em cũng chỉ là sinh viên ham chơi thôi, không có kinh nghiệm gì đâu XD

Mr.Fish viết 11:16 ngày 01/10/2018

Em mới năm 1 thôi

Trần Hoàn viết 11:22 ngày 01/10/2018

Theo mình nghĩ thì đệ quy nó cũng chỉ là một hình thức thể hiện của lặp thôi bạn. Nó là một phần của việc thể hiện thuật toán.
Ví dụ về hàm tính giai thừa theo cách không đệ quy:

int GiaiThua(int Input)
{
    int Output = 1;
    for (int i = Input; i > 1; i -= 1)
        Output *= i;//Cái này dựa trên lý thuyết GiaiThua(n) = n*(n-1)*(n-2)*...*1
    return Output;
}

và hàm tính giai thừa theo cách đệ quy:

int GiaiThua(int Input)
{
    if (Input <= 1)
        return 1;//Giai thừa của 0 hoặc 1 thì bằng 0
    return Input * GiaiThua(Input - 1)//n! = n*(n-1)*(n-2)*...*1 = n*(n-1)!
}
NG viết 11:18 ngày 01/10/2018

coder web Front End nói theo kiểu nhà quê chỗ tui là mấy đứa designer web, mấy ẻm tuyển từ trường thiết kế ra, nghệ sĩ chảnh chảnh kiểu họa sĩ vậy đó.
còn back end bác phải học cho tốt lập trình đa ngôn ngư, server, data base, security. nhất là khoản data base và security.

Mr.Fish viết 11:21 ngày 01/10/2018

Front-end toàn từ trường thiết kế ra hết hả bác @.@

rogp10 viết 11:22 ngày 01/10/2018

Cái này chỉ mới có dạng tuyến tính thôi.

Mr.Fish viết 11:17 ngày 01/10/2018

Em cảm ơn bác Em hình dung ra được rồi

rogp10 viết 11:15 ngày 01/10/2018

Lầm to. Cái này mới là phần 1 thôi. Còn 2 3 4 nữa.

NG viết 11:25 ngày 01/10/2018

Người ta mới năm 1, hiểu đc tới đó là ok rồi.
@Mr.Fish còn 3 năm, đừng bỏ sót nhé

Trần Hoàn viết 11:23 ngày 01/10/2018

Thường thì, phương thức đệ quy khó hiểu hơn phương thức không đệ quy. Tuy nhiên, đôi khi việc khử đệ quy sẽ dẫn đến một kết quả khá khó hiểu (dù đúng):

Dãy số Fibonacci dạng đệ quy: F(0) = 1, F(1) = 1, F(n) = F(n-1) + F(n-2) với n ≥ 2:

int Fibonacci(int Posision)
{
    if (Posision < 2)
        return 1;
    return Fibonacci(Posision - 1) + Fibonacci(Posision - 2);
}

Và dạng không đệ quy (WTF???)

int Fibonacci(int Posision)
{
    double 1CongCan5Chia2 = ((double)1 + sqrt(5)) / 2;
    double 1TruCan5Chia2 = ((double)1 - sqrt(5)) / 2;
    double 1ChiaCan5 = (double)1 / sqrt(5);
    return (int)(1ChiaCan5 * (pow(1CongCan5Chia2, Position) - pow(1TruCan5Chia2, Position)));
}
NG viết 11:21 ngày 01/10/2018

Nhắm có khiếu thẩm mỹ thì cứ đeo, sắm máy ảnh, photoshop, các thiết bị vẽ lên pc … rồi chiến thôi.

Mr.Fish viết 11:17 ngày 01/10/2018

vâng em biết rồi con đường vẫn còn dài

Bài liên quan
0