gpt4 book ai didi

c++ - "Executing"没有递归的语句体

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

我试图通过在旧的家庭作业中对范围 { } 内语句体的简化执行进行建模来掌握迭代和递归之间的关系。假设我有两种语句类型:while 语句和赋值语句。

现在,我假设 while 语句的条件始终为真。编辑:此外,假设 while 语句只执行一次(即,我应该将其称为 if 语句)

在递归中,这很简单:

executeBody( body )
{
for each stmt in body
{
switch (stmt)
{
case ASSIGNMENT:
// work
break;

case WHILE-STMT:
executeBody(whileStmt->body)
break;
}
}
}

但是,我在迭代时遇到了问题。我知道我需要模拟一个堆栈,但我无法概念化如何在进入下一条语句之前执行 while 语句中的所有语句。这是我所拥有的模型:

executeBody( body )
{
for each stmt in body
{
case ASSIGNMENT:
// work
break;

case WHILE-STMT:
{
stack< body > stack;
stack.push(whileStmt->body);
while (stack isNotEmpty)
{
for each stmt (in each body) in stack
{
case ASSIGNMENT:
// work;
break;

case WHILE-STMT:
//stack.push(this_whileStmt->body);
// ????
break;
}
}
}
}
}

编辑:更改递归示例以表明正文是一系列语句。

最佳答案

首先,我会放弃你的外循环。这是多余的。

   stack< body > stack;
stack.push(body);
while (stack isNotEmpty)
{
for each stmt (in stack.pop()) // pop the top statement off of your stack
{
case ASSIGNMENT:
// work;
stmt.Remove()
/*you don't need to break here. just go onto the next operation*/

case WHILE-STMT:
stack.push(stmt->body);
stmt.Remove()
stack.push(stmt);
break;
}

一旦您遇到WHILE-STMT: 情况,代码将中断并继续处理堆栈的顶部项目,也就是您刚刚放入其中的代码块。

一旦该 block 执行完毕,它将从堆栈中弹出(您在 for 声明中执行此操作),并且它将继续执行当前 block 。清除当前语句并将工作 block 推回堆栈的全部目的是为了能够像这样恢复。

关于c++ - "Executing"没有递归的语句体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323916/

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