【问题标题】:How would you program Pascal's triangle in R?你将如何在 R 中编写帕斯卡三角形?
【发布时间】:2010-04-13 19:08:34
【问题描述】:

我正在阅读自己(不是为硬件)有关编程的内容,其中一个练习涉及在 R 中编程 Pascal 的三角形。我的第一个想法是制作一个列表,然后将内容附加到它上面,但这也没有用好吧。然后我想从一个向量开始,然后在最后列出一个列表。然后我想到了制作一个矩阵,并在最后列出一个列表。

不知道用什么方法来解决这个问题。

有什么提示吗?

谢谢

【问题讨论】:

  • 最方便的存储结构可能取决于您要使用的算法。毕竟,R 确实有一个choose 函数。

标签: r math combinatorics


【解决方案1】:

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))
}

【讨论】:

  • 我总是先检查 Rosetta Code 的通用性。虽然解决方案通常不是最佳的,但它们可以作为第一步提供帮助。
  • pascalTriangle &lt;- function(h) { sapply(0:h, function(i) choose(0:h, i)) } 将三角形返回为方阵
【解决方案2】:

使用帕斯卡三角形的属性:

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

我想这段代码很快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2014-11-12
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多