我创建了阶乘函数,然后将其用于创建二项式系数的函数。我的阶乘函数有效,但是二项式函数无效。
我需要创建一个阶乘函数,然后将其用于使用R创建二项式系数函数。 我不允许使用基本程序的功能,例如阶乘或选择。 即使效率低下,我也不得不使用它来声明,逻辑等。
我必须打印零和十的阶乘,然后打印n = 5和k = 2的二项式系数
fact <- function(n) {
x <- 1
if(n == 0) {
print(1)
} else {
for(i in 1:n) {
x <- x*i
}
}
print(x)
}
fact(0)
fact(10)
bc <- function(n, k) {
y <- fact(n) / fact(n - k) * fact(k)
print(y)
}
bc(5, 2)
对于阶乘函数,我得到了正确的答案
但是对于二项式函数,我却遥遥无期。
如果有人可以告诉我我在哪里犯了错误,那我将非常感激。
答案 0 :(得分:1)
这里有很多问题,涉及基本R编码和一般编码。让我们逐步了解其中一些:
您的函数fact
实际上不返回任何内容。目前,它所做的只是向控制台提供print
个值。如果您查看help("print")
,就会发现
“打印”打印其参数,并不可见地(通过“ invisible(x)”)将其返回。
因此,为了使fact
实际返回一个值,我们可以做
fact <- function(n) {
x <- 1
if (n > 0) {
for (i in 1:n) x <- x * i
}
return(x)
}
我已通过删除不必要的n == 0
检查来整理您的代码。
请注意,仍有改进的空间。例如,有更好的方法来计算数字的阶乘。其次,您的函数当前无法正确处理负数。通常,阶乘仅针对非负整数定义。因此,您可以将fact
更改为负数返回NA
,或者-也许更有趣的是-将阶乘函数泛化为Gamma函数以允许任何实数(甚至复数)。无论哪种方式,我都会把它留给你。
类似地,您的函数bc
也不会返回任何内容,而是将y
的值写入控制台。此外,您需要注意方括号,以确保术语(n - k)!
和k!
在分母中。这两个问题都可以通过书面方式解决
bc <- function(n,k) return(fact(n)/(fact(n - k) * fact(k)))
要确认,我们计算5的系数,选择2:
bc(5, 2)
#10