跳到内容
← 全部问题

为什么这段 C++ 代码在循环结束后返回 b 而不是 r?

这段 C++ 代码在循环结束后返回 `b` 而不是 `r`,因为循环条件是 `r>0r > 0`。当循环终止时,`r` 已经变成了 0,这不是最大公约数。变量 `b` 保存了上一次迭代的最后一个非零余数,这才是实际的最大公约数。

适用条件

  • 循环条件是 `while (r>0r > 0)`。
  • 变量 `a`、`b` 和 `r` 在循环内按 `a=ba = b; b=rb = r; r=ar = a % b;` 更新。

理解与推导

  1. 追踪循环执行:`r` 被计算为余数。
  2. 当 `r` 变为 0 时,循环退出。
  3. 此时,`b` 包含上一次迭代中 `r` 的值(最后一个非零余数)。
  4. 返回 `b` 以输出最大公约数。

例子

视频解释说,当余数第一次变为 0 时循环退出,此时返回的 `b` 正好是最后一个非零余数,即最大公约数。

容易误解的地方

  • 认为返回 `r` 会输出正确的最大公约数。
  • 在状态更新期间混淆 `a`、`b` 和 `r` 的角色。

观看对应讲解

相关概念

继续追问

相关问题

理解原因

↗
掌握方法

↗
认识概念

↗

答案依据视频资料生成并经过独立核验。若有疑问,请核对原视频或联系原作者。