我知道如何在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,并使用该范围创建和。

备忘录可大大提高实施绩效。

09-07 08:57