循环因子

时间:2013-02-22 00:16:29

标签: r loops for-loop factorial

我创建了以下函数来计算给定数字的阶乘:

factorial <- function(x){
y <- 1
for(i in 1:x){
y <-y*((1:x)[i])
print(y)
}

}


factorial(6)

in console:

[1] 1
[1] 2
[1] 6
[1] 24
[1] 120
[1] 720

6!= 720所以显然最后一个数字是正确的,并且计算适用于所有数字。

问题是我只想将最后一个号码打印到控制台,有没有办法做到这一点?我一直试图将y变成函数中的一个向量,但它似乎不起作用。

5 个答案:

答案 0 :(得分:3)

将print语句移到循环外?

for(i in 1:x){
    y <-y*((1:x)[i])
}
print(y)

答案 1 :(得分:3)

print打印到屏幕上。函数将返回上次计算的表达式(或显式return值)的结果。您想要返回值以及打印它吗?

那就是说

R已经有一个调用factorial的函数gamma(x+1),使用整数值gamma(x+1) == x!

的事实

所以

factorial(6)

gamma(7)

你编写的函数在乘以大数时会出现整数溢出问题,并且在循环中反复重新分配给y时会出现非常低效的问题(在不需要的情况下递归)

答案 2 :(得分:0)

只需将print()放在循环之外

factorial <- function(x){
y <- 1
for(i in 1:x){
y <-y*((1:x)[i])
}
print(y)
}

您可以改进此功能...为什么(1:x)[i]而不仅仅是i?为什么print()而不是return()?最重要的是:为什么不在基础包中使用factorial()

答案 3 :(得分:0)

# take input from the user
n <- as.integer(readline(prompt="Enter a number: "))
factorial = 1 #set factorial variable to 1

# check is the number is negative, positive or zero
if(n < 0) {
  print("factorial does not exist for negative numbers")
} else if(n == 0) {
  print("The factorial of 0 is 1")
} else {
  for(i in 1:n) #for loop to expand n up to 1
    {
    factorial = factorial * i 
  }
  print(paste("The factorial of", n ,"is",factorial))
}

答案 4 :(得分:0)

您可以使用代码末尾的return函数来定义阶乘函数:

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