30/09/2018, 19:03

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ả
Mong nhận được giúp đỡ từ mọi người !

nhatlonggunz viết 21:06 ngày 30/09/2018

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

Thành Phạm viết 21:18 ngày 30/09/2018

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

stackoverflow.com
Rumpelstiltskin

How to make n nested for loops recursively?

java, recursion
asked by Rumpelstiltskin on 02:35PM - 16 Oct 13
Khánh Hưng Nguyễn viết 21:16 ngày 30/09/2018
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
Khánh Hưng Nguyễn viết 21:18 ngày 30/09/2018

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.

Gió viết 21:17 ngày 30/09/2018

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

Bài liên quan
0