下面递推程序计算 n!。当 n = 4 时,返回值为 24 。
int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}模拟循环过程,初始 result=1,每次 i 从 1 到 n 累乘,循环结束后 result 即为 n!。关键看循环条件和乘法操作是否覆盖所有因子。
循环条件写错(如 i < n 会少乘 n)、result 初始化为 0 导致全为 0、误以为需要递归实现、i 从 0 开始导致 result 被清零。
考纲定位:本题属于 GESP 四级"循环控制"与"递推"模块,命题人用 n=4 的简单递推式卡住的是考生对循环边界和累乘逻辑的机械记忆。
解题思维:模拟循环过程,初始 result=1,每次 i 从 1 到 n 累乘,循环结束后 result 即为 n!。关键看循环条件和乘法操作是否覆盖所有因子。
陷阱拆解:
i <= n 确保 i 取到 n,若改为 < 则 i 最大为 n-1,result 少乘 n,n=4 时得 6 而非 24。int result = 1; 是累乘起点,若写成 0,result *= i 永远为 0,无论 n 多大都返回 0。for (int i = 0; i <= n; i++) 中 i=0 时 result *= 0 使 result 恒为 0。反命题思维:若将 n 改为 5,result 应为 120;若改为递归版本 factorial(n) = n * factorial(n-1),逻辑不变但代码更冗长;若将循环改为 while (i <= n),需手动 i++,易漏写导致死循环。
结论:代码正确,选 A。