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

R语言For循环实现阶乘:两段代码结果异常问题求助

分析两段For循环阶乘代码的问题

嗨,我来帮你拆解这两段R代码的问题,帮你实现正确的阶乘计算~

方法1的核心问题:未实现累积相乘

先看方法1的代码:

s<-function(input){
  stu<-1
  for(i in 1:input){
    stu<-1*((1:input)[i])
  }
  return(stu)
}

这段代码的错误在于每次循环都重置了累积值:你在循环里把stu重新赋值为1 * 当前循环的元素,而不是用之前的stu值去乘当前元素。举个例子,计算s(4)时,循环过程是:

  • i=1:stu = 1*1 = 1
  • i=2:stu = 1*2 = 2
  • i=3:stu = 1*3 = 3
  • i=4:stu = 1*4 = 4
    最后自然只返回了最后一个元素,而不是1×2×3×4的阶乘结果24。这就是为什么s(4)输出4、s(8)输出8的原因。

方法2的逻辑是正确的(可优化写法)

再看方法2的代码:

k <- function(input){
  y <- 1
  for(i in 1:input){
    y <-y*((1:input)[i])
  }
  return(y)
}

这段代码的核心逻辑没问题!它实现了累积相乘:每次循环都把之前的y值乘以当前元素,逐步计算阶乘。比如计算k(4)时:

  • i=1:y = 1*1 = 1
  • i=2:y = 1*2 = 2
  • i=3:y = 2*3 = 6
  • i=4:y = 6*4 = 24
    所以这个函数应该能返回正确的阶乘结果。你说结果没完整展示,可能是运行时的小失误,可以再测试一下k(4),应该会得到24,k(8)会得到40320。

另外,这段代码可以简化:(1:input)[i]完全没必要,因为i本身就是从1到input的循环变量,直接用i代替更高效:

k <- function(input){
  y <- 1
  for(i in 1:input){
    y <- y * i
  }
  return(y)
}

额外小提示

如果只是需要计算阶乘,R里有内置的factorial()函数可以直接用,比如factorial(4)会直接返回24。不过用for循环练习逻辑是非常好的实践~

内容的提问来源于stack exchange,提问作者連振宇

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:31:50