如何用堆栈数据结构替换递归函数调用?

时间:2015-05-04 17:28:26

标签: c++

我有一个递归调用的函数:

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

1 个答案:

答案 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
     }
 }