Thắc mắc thuật toán backtracking trong tổ hợp sinh hoán vị

Em có đọc code trên web.
Cho em hỏi tại sao mà biến “l” có thể giảm giá trị được?, Với lại hàm Permute này kết thúc kiểu gì ạ. Mấy nay em không thể hiểu được tại sao, Nhờ mấy anh chị chỉ giáo với ạ, em cảm ơn rất nhiều :sunny:

// C++ program to print all 
// permutations with duplicates allowed 
#include <bits/stdc++.h> 
using namespace std; 
 
 
// Function to print permutations of string 
// This function takes three parameters: 
// 1. String 
// 2. Starting index of the string 
// 3. Ending index of the string. 
void permute(string a, int l, int r) 
{ 
    // Base case 
    if (l == r) 
        cout<<a<<endl; 
    else
    { 
        // Permutations made 
        for (int i = l; i <= r; i++) 
        { 
 
            // Swapping done 
            swap(a[l], a[i]); 
 
            // Recursion called 
            permute(a, l+1, r); 
 
            //backtrack 
         //   swap(a[l], a[i]); 
        } 
    } 
} 
 
// Driver Code 
int main() 
{ 
    string str = "ABC"; 
    int n = str.size(); 
    permute(str, 0, n-1); 
    return 0; 
} 
 
// This is code is contributed by rathbhupendra

Chào bạn,
Biến “l” nó chỉ tăng giá trị chứ nó có giảm đâu :smiley:
Còn hàm Permute kết thúc kiểu gì thì:

Đây là cái neo để nó kết thúc!

2 Likes

Với mấy bài dạng này, đã có code, thì tại sao bạn không mở debugger lên, chạy step by step để hiểu rõ từng dòng code nó chạy ra sao?
Ví dụ như ở đây

1 Like

Vâng em sẽ debug ạ và trước em dũng cout các giá trị của l và i trong hàm thì em cx không hiểu sao l nó lại giảm

Vâng ạ em cảm ơn nhiều ạ

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