我知道如何在Java中计算加泰罗尼亚语数字,这很简单:
int catalan(int n) {
int res = 0;
// Base case
if (n <= 1) {
return 1;
}
for (int i = 0; i < n; i++) {
res += catalan(i) * catalan(n - i - 1);
}
return res;
}
但是我无法想象如何在Scala中做到这一点,因为我是一个新手。
是否可以在不使用var的情况下执行此操作?
我尝试了以下操作,但不起作用:
object Catalan {
def catalan: Int => Int = n => {
val res = 0
val i = 0
if (n <= 1) 1
else for (i <- 0 to n-1) res += catalan(i) * catalan(n - i - 1)
}
}
提前致谢 :)
最佳答案
这个怎么样?
def catalan(n: Int): Int =
if (n <= 1) 1
else (0 until n).map(i => catalan(i) * catalan(n - i - 1)).sum
在这里,我做的事情与您的Java实现相同,但是我使用一个范围(0到n)代替了var,并使用该范围创建和。
备忘录可大大提高实施绩效。