我想在100 X 100数组上执行DFS.(假设数组的元素代表图形 node )所以假设最坏的情况下,递归函数调用的深度可以高达10000,而每次调用最多需要20字节.那么这是可行的方法吗?是否存在堆栈溢出的可能性?
C/C++中堆栈的最大大小是多少?
请为这两个项目指定gcc
一般的限制是什么?
我想在100 X 100数组上执行DFS.(假设数组的元素代表图形 node )所以假设最坏的情况下,递归函数调用的深度可以高达10000,而每次调用最多需要20字节.那么这是可行的方法吗?是否存在堆栈溢出的可能性?
C/C++中堆栈的最大大小是多少?
请为这两个项目指定gcc
一般的限制是什么?
在VisualStudio中,我认为默认堆栈大小是1MB,因此在递归深度为10000的情况下,每个堆栈帧最多可以是~100字节,这对于DFS算法来说应该足够了.
大多数编译器(包括Visual Studio)都允许您指定堆栈大小.在一些(全部?)Linux认为堆栈大小不是可执行文件的一部分,而是操作系统中的一个环境变量.然后,您可以使用ulimit -s
判断堆栈大小,并使用例如ulimit -s 16384
将其设置为新值.
下面是gcc的默认堆栈大小link.
无递归的DFS:
std::stack<Node> dfs;
dfs.push(start);
do {
Node top = dfs.top();
if (top is what we are looking for) {
break;
}
dfs.pop();
for (outgoing nodes from top) {
dfs.push(outgoing node);
}
} while (!dfs.empty())