이전 숙제 과제에서 범위 {} 내에 명령문 본문을 단순화 한 실행을 모델링하여 반복 및 재귀 간의 관계를 파악하려고합니다. while 문과 대입 문이라는 두 개의 문 유형이 있다고 가정 해 보겠습니다.재귀없이 명령문 본문을 "실행"
지금은 while 문이 항상 참이라고 가정합니다. 편집 : 난,
executeBody(body)
{
for each stmt in body
{
switch (stmt)
{
case ASSIGNMENT:
// work
break;
case WHILE-STMT:
executeBody(whileStmt->body)
break;
}
}
}
을하지만 : 또한, 단 한 번 실행하는 동안 문을 가정
재귀,이 간단한 것 (즉, 나는 if 문 것은 그것이라고해야) 반복을 위해이 작업을 수행하는 데 문제가 있습니다. 스택을 시뮬레이트 할 필요가 있지만 다음 문으로 이동하기 전에 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;
}
}
}
}
}
편집 : 몸이 문장의 순서는 것을 보여주기 위해 재귀 예를 변경 여기에 내가 무엇을의 모델입니다.
은 정확한 코드를 게시 한 psudo-code이거나 자신의 코드입니다 –
내 자신의 코드입니다 - 올바르지 않습니다. 완료되지 않았습니다. – Vance
'while (cond) cmd'입니다. 여기서 cmd는 명령문 또는 블록이 될 수 있습니다. 그런 다음 cmd/cond/exec 상태 튜플 스택을 유지합니다. 잠시 만났을 때, 콘돔이라면 트리플을 누르십시오. 표준 블록은 잘못된 조건을 푸시합니다. 바깥 쪽 루프는 최상위 스택의 exec 상태를 진행시키고 cmd를 얻고 핸들을 얻는 것입니다. 최상위 작업이 완료되면 cond 및 pop을 확인하거나 exec 상태를 재설정하십시오. – Yakk