首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中Catalan数的递推法

R中Catalan数的递推法
EN

Stack Overflow用户
提问于 2018-05-21 16:41:07
回答 5查看 560关注 0票数 0

我试图在R中编写一个函数,输入numb并输出相应的加泰罗尼亚数字。关于您的信息,加泰罗尼亚数字的递归公式是,

代码语言:javascript
复制
C_0 = 1; 
C_n = {(4n - 2)*C_(n-1)}/(n+1)

我的代码如下,

代码语言:javascript
复制
catalan_num_recr <- function(numb){
  if (numb == 0){
    return(1)
  }
  else
    return(((4*numb-2)*catalan_num_recr(numb-1))/(numb+1))
}

当我运行这个函数时,我得到,

代码语言:javascript
复制
> catalan_num_recr(3)
[1] 5

这是正确的。

AIM:不过,我想找出加泰罗尼亚的数字范围,我想找到类似的东西,catalan_num_recr(1:10)

PROBLEM:这不适用于我的函数,我收到以下警告

代码语言:javascript
复制
Warning messages:
1: In if (numb == 0) { :
  the condition has length > 1 and only the first element will be used

很多输出值都是错误的,

代码语言:javascript
复制
> catalan_num_recr(1:15)
 [1] 1.000000 2.000000 2.500000 2.800000 3.000000 3.142857 3.250000
 [8] 3.333333 3.400000 3.454545 3.500000 3.538462 3.571429 3.600000
[15] 3.625000

有人能帮我修改我的功能吗?或者帮我看穿这个问题?

致以问候。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-05-21 16:48:00

使用Vectorize,它接受一个函数并返回一个新函数,它本质上是接受矢量化输入的函数的包装器。计算实际上是由mapply重复执行的,所以它不会像编写一个手工向量化的函数那样快。

代码语言:javascript
复制
Vectorize(catalan_num_recr)(1:15)
 [1]       1       2       5      14      42     132     429    1430    4862
[10]   16796   58786  208012  742900 2674440 9694845
票数 2
EN

Stack Overflow用户

发布于 2018-05-21 16:48:29

您的函数目前不接受向量输入。这可能有点令人困惑,因为许多函数,如数学运算符,在默认情况下都是向量化的。您需要使用mapapply函数将该函数应用于向量的每个元素。这实际上是一个快速的循环,并且purrr包具有一致的语法和类型稳定的优点。

代码语言:javascript
复制
catalan_num_recr <- function(numb){
  if (numb == 0){
    return(1)
  }
  else
    return(((4*numb-2)*catalan_num_recr(numb-1))/(numb+1))
}

purrr::map_dbl(1:15, catalan_num_recr)
#>  [1]       1       2       5      14      42     132     429    1430
#>  [9]    4862   16796   58786  208012  742900 2674440 9694845

reprex封装创建于2018-05-21 (v0.2.0)。

票数 1
EN

Stack Overflow用户

发布于 2018-05-21 16:49:25

您只需要使用来自sapply家族的向量化函数,比如apply

sapply(1:10,catalan_num_recr,USE.NAMES = F)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50453173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档