如何用R语言编写Pascal三角形?

kd3sttzy  于 2023-05-11  发布在  R语言
关注(0)|答案(3)|浏览(147)

我自己在阅读(不是为了HW)有关编程的书籍,其中一个练习涉及到用R语言编写Pascal三角形。我的第一个想法是做一个列表,然后在上面添加内容,但效果不太好。然后我想到从一个向量开始,最后列出一个列表。然后我想到做一个矩阵,最后列出一个列表。
不知道该怎么办。
有什么提示吗?
谢谢

yizd12fk

yizd12fk1#

在Rosetta Code上有一个解决方案:

pascalTriangle <- function(h) {
  for(i in 0:(h-1)) {
    s <- ""
    for(k in 0:(h-i)) s <- paste(s, "  ", sep="")
    for(j in 0:i) {
      s <- paste(s, sprintf("%3d ", choose(i, j)), sep="")
    }
    print(s)
  }
}

如果我自己开发它,我会将其存储在列表中,因为这是处理可变长度行的最自然的数据结构。但在做出决定之前,您确实需要澄清一个用例。您是否打算在数据生成后对其进行分析?

  • 编辑:*

以下是重写的Rosetta解决方案,减少了循环,并将结果存储为列表:

pascalTriangle <- function(h) {
  lapply(0:h, function(i) choose(i, 0:i))
}
00jrzges

00jrzges2#

使用Pascal三角形的性质:

x <- 1
print(x)
for (i in 1:10) { x <- c(0, x) + c(x, 0); print(x) }

我想这个代码是非常快的。

ryoqjall

ryoqjall3#

这里有一个避免循环的解决方案(R不是循环的忠实粉丝):

sapply(1:10, function(n) sapply(0:n, function(k) choose(n, k)))

你可以用任何向量替换1:10,甚至是不连续的向量:

R> sapply(c(5, 10), function(n) sapply(0:n, function(k) choose(n, k)))
[[1]]
[1]  1  5 10 10  5  1

[[2]]
[1]   1  10  45 120 210 252 210 120  45  10   1

相关问题