如何将递归实现的game函数转换为while循环迭代实现?
递归转迭代:C语言游戏函数的循环实现
先拆解原递归函数的核心逻辑:
- 显示当前
level对应的问题,接收用户答案 - 若
level < 8:- 答对则提升
level,继续下一题 - 答错则重置
level为0,清屏后重新开始
- 答对则提升
- 当
level == 8时,提示通关
递归调用在这里只是用来重复执行上述流程,我们可以直接用while循环替代,把重复的逻辑放到循环体内,通过修改level变量来控制循环走向:
void game(void) { int answer; // 循环直到level达到8(通关条件) while (level < 8) { printf("%s", Questions[level]); scanf("%d", &answer); if (is_right(level, answer)) { printf("Good Job!\n"); level += 1; } else { printf("Sorry, you got the wrong answer. Try Again! \n"); sleep(1); system("clear"); level = 0; } } // 循环退出说明level >=8,触发通关提示 printf("Great Job, You Won!"); }
关键说明:
- 原递归中每次调用
game()其实就是重新执行一次“提问-判断”流程,迭代版本用while循环直接包裹这个流程,避免了函数调用栈的开销 - 答对时直接递增
level,下一次循环会自动处理下一级问题 - 答错时重置
level为0,下一次循环会从第0级问题重新开始,和原递归逻辑完全一致 - 当
level达到8时,循环条件不满足,退出循环后显示通关信息,对应原递归的else分支
内容的提问来源于stack exchange,提问作者Frog2341
相关产品推荐
相关产品推荐

