我有一个递归调用的函数:
void func(int a, bool arr[]) {
...
if ( ... ) {
func(a, arr);
}
}
从我的主要代码中调用它,如
int int_var = 0;
bool bool_array[10];
func(int_var, bool_array);
现在我想使用堆栈数据结构来替换该函数的递归调用。
我该怎么做呢,例如使用std::stack
?
答案 0 :(得分:1)
用循环替换递归调用并使用std::stack<>
非常简单。
函数调用使用程序/线程内部函数调用堆栈,因此对该函数的递归调用仅意味着将实际参数值推送到堆栈上。
函数返回后,将立即确定结果,并从堆栈中弹出。
为了提供更合适的示例,我已使用bool[]
替换了您的std::vector<bool>
数组:
struct params {
int a;
std::vector<bool> arr;
};
std::stack<params> myStack;
int int_var = 0;
std::vector<bool> bool_array;
// put an initial value onto the stack
myStack.push(params{int_var,bool_array});
while(!myStack.empty()) {
// compute int_var and the bool_array
if(/* ... */) {
myStack.push(params{int_var,bool_array});
}
else {
params p = myStack.top();
myStack.pop();
// handle results of the previous computation
}
}