I have been having some problems with this, as it causes a stack overflow:
unordered_set<string> seen;
vector<long long> edges;
void dfs(string node, long long& k, string& A) //used by deBruijn function
{
    for (long long i = 0; i < k; i = i + 1) {
        string str = node + A[i];
        if (!seen.count(str)) {
            seen.insert(str);
            dfs(str.substr(1), k, A); //<-Call the recursion
            edges.push_back(i);
        }
    }
}
string deBruijn(long long n, long long k, string A) //Calls the recursive dfs
{
    seen.clear();
    edges.clear();
    string startingNode = string(n - 1, A[0]);
    dfs(startingNode, k, A);
    string S; 
    long long l = pow(k, n);
    for (long long i = 0; i < l; i = i + 1)
        S += A[edges[i]];
    S += startingNode;
    return S;
}
How can I turn the "dfs" function into an iterative function?
