在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
用return表达式,最后把它转换成表达式体:
fun C(n: Int): Int = if (n == 0) 1 else (0 until n).sumBy { C(it) * C(n - it - 1) }
请注意,此功能不适用于tailrec
因为最后一个操作不是对函数( C
)的调用,而是一个求和操作。