Tạo chuỗi bằng đệ quy?

Xin chào mọi người,
Câu hỏi của mình như sau :

  • In ra tất cả các chuỗi tạo từ “a”, “b”, “c” khi nhập vào n :
    Vd : Khi nhập n = 3 thì kết quả trả về sẽ là :
    aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cab cba cbb cbc cca ccb ccc

Mình có thể làm bằng 3 vòng for lồng nhau, nhưng với đệ quy thì mình không có ý tưởng gì cả :smiley:
Mong nhận được giúp đỡ từ mọi người !

1 Like

Anh thử google “đệ quy liệt kê các chỉnh hợp lặp” xem ?

2 Likes

Thử cái này xem bạn :smile:

1 Like
Private Function DeQuy(intSN As Integer,
                    intEN As Integer,
                    intSP As Integer,
                    intEP As Integer,
                    ParamArray Chuoi() As String) As String
    If intSN = intSP = intEP = intEN And intSN = 0 Then
        DeQuy = ""
        intSN = 1
        intEN = 1

        intSP = 1
        intEP = Chuoi.Length

        DeQuy = Chuoi(intSP - 1) + Chuoi(intSN - 1) + Chuoi(intEN - 1) + ";"

        intEN += 1
        DeQuy += DeQuy(intSN, intEN, intSP, intEP, Chuoi)
        Return DeQuy
    End If

    If intEN > intEP Then
        intEN = 1
        intSN += 1

        If intSN > intEP Then
            intSN = 1
            intSP += 1

            If intSP > intEP Then
                Exit Function
            End If

        End If
    ElseIf (intEN = intEP = intSN = intEP) And (intSP = Chuoi.Length) Then
        Exit Function
    End If

    DeQuy += Chuoi(intSP - 1) + Chuoi(intSN - 1) + Chuoi(intEN - 1) + ";"
    intEN += 1

    DeQuy += DeQuy(intSN, intEN, intSP, intEP, Chuoi) 

End Function
Private Sub Main()
    Dim Chuoi As String

    Chuoi = DeQuy(0, 0, 0, 0, "a", "b", "c")
End Sub
1 Like

Hiện tại mình mặc định n = 3.
Có thể dựa vào code đó có thể phát triển thành n >3.
Tuy nhiên vì sử dụng đệ quy nên sẽ gây ra trường hợp stackoverflow không tốt, tốt kém quá nhiều bộ nhớ máy.
Do đó, nếu thực hiện được vòng lặp như bạn thì vẫn tốt.

1 Like

Có khử đệ quy, cứ thế mà dùng

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