You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这两段For循环存在差异?求阶乘时一段多循环一次的原因

为什么两种For循环计算阶乘时循环次数不同?

嘿,这个问题戳中了循环逻辑里最容易混淆的点之一!咱们拿具体例子拆解,一下子就能搞懂。

首先明确阶乘的定义:n! = 1×2×3×…×n,核心是要把从1到n的所有整数相乘。

先看两种循环的实际表现

假设我们要计算5的阶乘(5! = 120):

用<=的循环

int n = 5;
int factorial = 1;
for (int i = 1; i <= n; i++) {
    factorial *= i;
}

这里的判断条件是i <= 5,意味着只要i小于或等于5,循环体就会执行。所以i的取值是1、2、3、4、5,一共执行5次循环,刚好把1到5都乘了一遍,结果是正确的120。

用<的循环

int n = 5;
int factorial = 1;
for (int i = 1; i < n; i++) {
    factorial *= i;
}

这个判断条件是i < 5,也就是i必须严格小于5才会执行循环。所以i的取值只有1、2、3、4,只执行4次循环,最后只乘到了4,结果是24(也就是4!)——反过来讲,就是用<=的循环比<的多执行了一次。

为什么“小于等于”和“小于”会有这种区别?

这完全是由判断条件的逻辑本质决定的:

  • <=是包含边界值的判断:当i等于n的时候,条件依然为真,循环体会再执行一次,把n乘进去,刚好符合阶乘的要求。
  • <是不包含边界值的判断:当i等于n的时候,条件直接为假,循环立刻终止,所以n这个关键的乘数就被漏掉了。

如果想用<的条件得到正确的阶乘,其实可以调整终止值,比如把条件改成i < n + 1,这样i到5的时候依然满足5 < 6,循环次数就和i <=n完全一致了。


内容的提问来源于stack exchange,提问作者Jerry Murphy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:44:09