c++ - 递归到迭代保留变量和调用顺序

标签 c++ recursion iteration

我有一个非常复杂的代码来从递归转换为迭代。我不知道如何使用这种代码来做到这一点:

read(std::queue<int>& rules, std::queue<double>& data)
{
  int r = rules.top();
  rules.pop();
  switch(r)
  {
    case 1:
    {
      double a = data.front(); data.pop();
      read(rules, data);
      double b = data.front(); data.pop();
      read(rules, data);
      double c = a + b;
      data.push(c);
    }
    break;
    case 2:
    {
      read(rules, data);
      data.pop();
    }
    break;
    case 3:
    {
      data.push(0.0);
    }
  }
}

在这种情况下我不知道如何开始......

最佳答案

标准方法是使用显式堆栈作为局部变量来模拟递归堆栈。

struct Task {
  int caseValue; /* 1, 2, 3 */
  std::queue<int>& rules;
  std::queue<double>& data;
  void execute(std::stack<Task>& agenda)
     { // do one thing and put next tasks in the agenda
       // by using agenda.push_back
     }
};
typedef std::stack<Task> Agenda;
void read(...) {
  Agenda agenda;
  int r = rules.top();
  rules.pop();
  agenda.push_back(Task(r, rules, data));
  while (!agenda.empty()) {
    Task task = agenda.top();
    agenda.pop_back();
    task.execute(agenda);
  };
}

这里的议程模拟了你的递归堆栈。迭代版本可能效率较低,但可以简化调试,因为您可以在 while 循环中设置断点。

关于c++ - 递归到迭代保留变量和调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39103705/

相关文章:

c++ - 如何获取 C++ 接口(interface) VMT 的地址

java - 在Java中递归创建二叉搜索树

function - Prolog 中的递归函数

recursion - 以相反的顺序打印单向链表

python - Numpy 将函数应用于数组

C++,同一类中的类实例,类中的父/子结构

c++ - 程序无法运行 OpenCV,即使其他人可以

c++ - 帮助删除用户帐户的功能

c++ - 如何将智能指针返回到成员变量?

recursion - 如何找到图中所有等效的顶点?