私が持っていた古い宿題のスコープ { } 内の一連のステートメントの単純化された実行をモデル化することによって、反復と再帰の関係を把握しようとしています。while ステートメントと代入ステートメントの 2 つのステートメント タイプがあるとします。
今のところ、while ステートメントの条件は常に true であると想定しています。 編集: また、while ステートメントが 1 回だけ実行されると仮定します (つまり、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;
}
}
}
}
}
編集: 再帰の例を変更して、本文が一連のステートメントであることを示しました。