scala用递归法写杨辉三角
时间: 2023-10-13 22:06:35 浏览: 187
以下是用递归法写杨辉三角的Scala代码:
```scala
object YangHuiTriangle {
def main(args: Array[String]): Unit = {
val n = 6
for (i <- 0 until n) {
for (j <- 0 to i) {
print(pascal(i, j) + " ")
}
println()
}
}
def pascal(row: Int, col: Int): Int = {
if (col == 0 || col == row) 1
else pascal(row - 1, col - 1) + pascal(row - 1, col)
}
}
```
运行结果:
```
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
```
在上面的代码中,我们定义了一个名为`pascal`的递归函数,该函数接收两个参数`row`和`col`,表示要求的杨辉三角中第`row`行第`col`列的值。
函数的递归终止条件是当`col`等于0或者`col`等于`row`时,返回1,因为这两种情况下都是第一列或者对角线,值都为1。
否则,函数将递归调用自己,分别求解`row-1`行`col-1`列和`row-1`行`col`列的值,最后将它们相加,得到第`row`行`col`列的值。
相关问题
用scala写杨辉三角
以下是Scala写的杨辉三角代码:
```scala
object YangHuiTriangle {
def main(args: Array[String]): Unit = {
val numRows = 10 // 设置要输出的行数
val triangle = Array.ofDim[Int](numRows, numRows) // 创建二维数组
for (i <- 0 until numRows) {
triangle(i)(0) = 1 // 每行第一个数为1
for (j <- 1 to i) {
triangle(i)(j) = triangle(i - 1)(j - 1) + triangle(i - 1)(j) // 计算当前数值
}
}
for (i <- 0 until numRows) {
for (j <- 0 to i) {
print(triangle(i)(j) + " ") // 输出当前数值
}
println() // 换行
}
}
}
```
运行结果:
```
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
```
scala实现杨辉三角
以下是scala实现杨辉三角的代码:
```scala
object PascalTriangle {
def main(args: Array[String]): Unit = {
val numRows = 5
val triangle = generate(numRows)
println(triangle)
}
def generate(numRows: Int): List[List[Int]] = {
if (numRows <= 0) Nil
else if (numRows == 1) List(List(1))
else {
val previousTriangle = generate(numRows - 1)
val previousRow = previousTriangle.last
val newRow = (0 :: previousRow) zip (previousRow :+ 0) map { case (a, b) => a + b }
previousTriangle :+ newRow
}
}
}
```
在这个实现中,我们使用递归来生成杨辉三角。如果 `numRows` 小于等于0,我们返回空列表。如果 `numRows` 等于1,则我们返回一个包含一个1的列表。对于大于1的 `numRows`,我们先生成一个 `numRows-1` 的杨辉三角,然后计算出新的一行,并将其添加到结果列表中。我们对上一行的相邻元素相加,即使最左边和最右边的元素是0(方便起见,我们在第一位添加了一个0,因此不需要处理最左侧的元素)。这样可以生成下一行的数字,我们将其添加到列表中并返回。
阅读全文