R语言学习-定义组合数函数

最近在写R语言期末报告的时候遇到一道写组合数函数的题目,还是挺有意思的,就跟大家分享一下,希望能对你有帮助~

内容为两大部分,分别是

阶乘

组合数

接下来看看题目要求
在这里插入图片描述
在脑海里第一反应就是,先温习一下阶乘,是的,先把阶乘函数定义出来,组合数就很简单了。

阶乘

阶乘函数有很多种实现的办法,这里使用递归的方法实现
函数就一个参数n,当n等于0或者等于1时,结果为1,当n小于0时,我们定义函数会报错。

#定义阶乘函数,输入负数或者浮点数都会报错
JieC = function(n)
{	result = 0
	if(n < 0 | n %% 1 != 0)
		{print("Data Error!")
		return ()}
	else if(n == 0 | n == 1)
		{result = 1}
	else	{result = JieC(n - 1) * n}

	return (result)
}

至于这里为什么会有return ()
在这里插入图片描述
是因为我不希望出现下面的情况

在这里插入图片描述
测试一下这个函数

#测试
JieC(5)

输出:

JieC(5)
[1] 120

#测试
JieC(10.2)

输出:

JieC(10.2)
[1] “Data Error!”
NULL

#测试
JieC(-5)

输出:

JieC(-5)
[1] “Data Error!”
NULL

没有问题,接下来定义组合数的函数就很简单的事了。

组合数

我们还是希望我们的程序更加的健壮,考虑n,k都不能小于0,k必须小于等于n,n,k都不能带小数点。

#定义计算组合数函数
CNK = function(n,k)
{	result = 0
	if(n < 0 | k < 0 | n %% 1 != 0 | k %% 1 != 0 | k > n)
		{print("ERROR")}
	else
	{	result = (JieC(n)) / (JieC(k) * JieC(n - k))
		return (result)
	}	
}

测试一下函数

#测试
CNK(-10,7)
CNK(10,-7)
CNK(10,1.7)
CNK(1.9,7)
CNK(10,11)
CNK(10,7)
CNK(10,10)

输出:

#测试
CNK(-10,7)
[1] “ERROR”
CNK(10,-7)
[1] “ERROR”
CNK(10,1.7)
[1] “ERROR”
CNK(1.9,7)
[1] “ERROR”
CNK(10,11)
[1] “ERROR”
CNK(10,7)
[1] 120
CNK(10,10)
[1] 1

大功告成!!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值