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,提问作者連振宇
相关产品推荐
相关产品推荐

