gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:30:00 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com