为何这两段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
相关产品推荐
相关产品推荐

