2013-02-22 116 views
1

我创建了以下funcion计算给定数的阶乘:阶乘for循环

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变成矢量,但它似乎不起作用。

+1

为什么你不只是在做'阶乘( 1:6)'? – thelatemail 2013-02-22 00:20:29

+3

或只是'factorial(6)' – N8TRO 2013-02-22 00:21:37

回答

3

将print语句移到循环之外?

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

哦,我的上帝,这是讨厌的,一直浪费2小时... – 2013-02-22 00:22:28

+0

发生在我们最好的。 :) – Achrome 2013-02-22 00:22:57

+0

非常感谢你! – 2013-02-22 00:23:01

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

print打印到屏幕上。函数将返回上次评估表达式的结果(或明确的return值)。你想要返回值并打印吗?

话虽这么说

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

所以

factorial(6) 

gamma(7) 

你写将有整数溢出问题的函数的事实当乘以大数时,以及效率非常低,因为您在循环内重复指定y (递归时,它并不需要是)

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)) 
} 
+0

这似乎是一个更简单的方法,如果你可以将它嵌入到一个完美的功能 – LORNA 2017-10-06 10:05:26

+0

是用同一种语言编写的问题和答案? – 2017-10-06 10:11:53

+0

是的,它全部在R – LORNA 2017-10-06 17:19:06

0

您可以通过使用恢复功能,在你的代码的最后定义阶乘函数:

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