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 :smiley:

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

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

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

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

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ó :smile:

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);
 }
1 Like

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

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

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

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

1 Like

Em mới năm 1 thôi :smiley:

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)!
}
2 Likes

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.

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

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

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

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

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é

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)));
}
2 Likes

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.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?