scala用递归法写杨辉三角
时间: 2023-10-13 11:06:35 浏览: 80
以下是用递归法写杨辉三角的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 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,因此不需要处理最左侧的元素)。这样可以生成下一行的数字,我们将其添加到列表中并返回。
scala杨辉三角代码
以下是Scala实现的杨辉三角代码:
```scala
object YangHuiTriangle {
def main(args: Array[String]) {
val n = 6 // 定义行数为6
var arr = Array.ofDim[Int](n, n) // 定义n*n的二维数组
for (i <- 0 until n) {
// 第一列和对角线的值为1
arr(i)(0) = 1
arr(i)(i) = 1
for (j <- 1 until i) {
// 每个元素等于上一行前后两个元素之和
arr(i)(j) = arr(i-1)(j-1) + arr(i-1)(j)
}
}
// 输出杨辉三角
for (i <- 0 until n) {
for (j <- 0 to i) {
print(arr(i)(j) + " ")
}
println()
}
}
}
```
运行结果:
```
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
```