【发布时间】:2021-10-22 04:00:14
【问题描述】:
在帕斯卡三角形中,三角形边上的数字都是1,三角形内的每个数字都是上面两个数字的和。帕斯卡三角形示例如下所示。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
我编写了一个程序,使用以下技术计算帕斯卡三角形的元素。
/**
* 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)
}
所以,例如如果
i/p: pascalTriangle(0,2)
o/p: 1.
i/p: pascalTriangle(1,3)
o/p: 3.
上述程序是正确的,并按预期给出了正确的输出。我的问题是,是否可以编写上述算法的尾递归版本?怎么样?
【问题讨论】:
-
是的,就像编写任何尾递归函数一样。您需要自己的剩余操作堆内堆栈,一个用于跟踪结果的内部累加器。
标签: algorithm scala recursion tail-recursion