我需要编写一个计算 Padovan sequence 的函数。程序必须允许输入一个表示序列长度的整数。

预期序列为:1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37, 49, 65, 86, 114, 151, ...

padovan <- function(n){
  p <- c(1,1,1)
  p <- c(p,p[n-2]+p[n-3])
  print(p)
}
padovan(50)

最佳答案

下面的代码返回padovan的序列,我使用了for循环。

##### Option 1
padovan <- function(k){
p<-c()
p[1]<-p[2]<-p[3]<-1
if(k < 4){return(p[1:k])}else{
for(n in 4:k){p[n]<-p[n-2]+p[n-3]}}
return(p)}

padovan(50)
[1]      1      1      1      2      2      3      4      5      7      9
[11]     12     16     21     28     37     49     65     86    114    151
[21]    200    265    351    465    616    816   1081   1432   1897   2513
[31]   3329   4410   5842   7739  10252  13581  17991  23833  31572  41824
[41]  55405  73396  97229 128801 170625 226030 299426 396655 525456 696081

##### Option 2
library(Rcpp)
cppFunction('int padovanC(int x){
    if (x <= 3) return(1);
    return(padovanC(x-2) + padovanC(x-3));}')
sapply(1:50, padovanC)

关于r - 创建 Padovan 序列的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50850607/

10-16 22:13