在帕斯卡三角形中,三角形边上的数字都是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)
上面的程序是正确的,并给出了预期的正确输出。我的问题是,是否可以编写上述算法的尾递归版本?如何?
我需要对列值进行排序并在数据框中分组另一列。
数据框中的数据如下所示。
+------------+---------+-----+
| 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)