《Head First C#》循环执行次数存疑:为何未陷入死循环?
循环终止性分析
根据你描述的逻辑,你的判断是正确的——按照你说的代码执行流程,这个循环确实会无限运行:
- 初始
p == q,while (p < q)条件不成立,直接跳过该块 - 执行
q = p - q后,q变为0 - 后续
for循环里q = q * 2的操作只会让q保持0,while (p < q)的条件永远无法触发(这类示例里p通常是正整数),导致外层循环没有终止条件,进入无限循环。
书中说运行8次,大概率是你误读了代码的初始值或结构细节:
- 比如初始时
p和q并非相等(比如常见的p=8、q=1) - 或者
q = p - q的位置是在while循环内部,而非外部
举个符合“运行8次”结论的典型代码示例:
int p = 8; int q = 1; while (p > 0) { while (p < q) { q = q - p; } p = p - q; q = q * 2; }
这段代码会在执行8次外层循环后终止,因为每次循环p会逐步递减至0。
建议你重新核对书中的完整代码片段,重点确认初始变量赋值、循环嵌套关系以及语句执行顺序,应该是细节理解上出现了偏差。
内容的提问来源于stack exchange,提问作者Dredin 47
相关产品推荐
相关产品推荐

