小编Mad*_*ffs的帖子

帕斯卡三角形 Scala:使用尾递归方法计算帕斯卡三角形的元素

在帕斯卡三角形中,三角形边上的数字都是1,三角形内部的每个数字都是它上面两个数字的和。帕斯卡三角形示例如下所示。

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1
Run Code Online (Sandbox Code Playgroud)

我编写了一个程序,使用以下技术计算帕斯卡三角形的元素。

/**
* Can I make it tail recursive???
*
* @param c column
* @param r row
* @return 
*/
def pascalTriangle(c: Int, r: Int): Int = {
  if (c == 0 || (c == r)) 1
  else
    pascalTriangle(c-1, r-1) + pascalTriangle(c, r - 1)
}
Run Code Online (Sandbox Code Playgroud)

所以,例如如果

i/p: pascalTriangle(0,2)  
o/p: 1.

i/p: pascalTriangle(1,3)  
o/p: 3.
Run Code Online (Sandbox Code Playgroud)

上面的程序是正确的,并给出了预期的正确输出。我的问题是,是否可以编写上述算法的尾递归版本?如何?

algorithm recursion scala tail-recursion

5
推荐指数
1
解决办法
5655
查看次数

在scala中的数据框上应用groupBy和orderBy

我需要对列值进行排序并在数据框中分组另一列。

数据框中的数据如下所示。

+------------+---------+-----+
|      NUM_ID|    TIME |SIG_V|
+------------+---------+-----+
|XXXXX01     |167499000|55   |
|XXXXX02     |167499000|     |
|XXXXX01     |167503000|     |
|XXXXX02     |179810000| 81.0|
|XXXXX02     |179811000| 81.0|
|XXXXX01     |179833000|     |
|XXXXX02     |179833000|     |
|XXXXX02     |179841000| 81.0|
|XXXXX01     |179841000|     |
|XXXXX02     |179842000| 81.0|
|XXXXX03     |179843000| 87.0|
|XXXXX02     |179849000|     |
|XXXXX02     |179850000|     |
|XXXXX01     |179850000| 88.0|
|XXXXX01     |179857000|     |
|XXXXX01     |179858000|     |
|XXXXX01     |179865000|     |
|XXXXX03     |179865000|     |
|XXXXX02     |179870000|     |
|XXXXX02     |179871000| 11  |
+--------------------+-------+
Run Code Online (Sandbox Code Playgroud)

以上数据已按TIME列排序。

我的要求是将NUM_ID列分组,如下所示。

+------------+---------+-----+
|      NUM_ID|    TIME …
Run Code Online (Sandbox Code Playgroud)

scala dataframe apache-spark apache-spark-sql

0
推荐指数
1
解决办法
64
查看次数