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?