在Kotlin的一行中写简单的循环

我正在尝试将下面的java方法改写成Kotlin函数:

int C(int n) { if (n == 0) return 1; int result = 0; for (int i = 0; i < n; i++) result += C(i) * C(n - i - 1); return result; } 

我怎样才能把它写在一行? 就像是:

 tailrec fun C(n: Int): Int = if (n == 0) 1 else { /* for loop? */} 

你可以将你的Java代码复制到IntelliJ IDEA中,然后将它转换成Kotlin代码,然后可以将0..n - 1更改为0 until n (谢谢fredoverflow ),用sumBy{}替换for循环,内联result代替if用returnexpression式,最后把它转换成expression式体:

 fun C(n: Int): Int = if (n == 0) 1 else (0 until n).sumBy { C(it) * C(n - it - 1) } 

请注意,此function不适用于tailrec因为最后一个操作不是对函数( C )的调用,而是一个求和操作。