我创建了以下函数来计算给定数字的阶乘:
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变成函数中的一个向量,但它似乎不起作用。
答案 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)
}