我试图将以下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),将for循环替换为 sumBy{}
,内联result
,用return替换if
表达式,最后将其转换到表达主体:
fun C(n: Int): Int = if (n == 0) 1 else (0 until n).sumBy { C(it) * C(n - it - 1) }
请注意,此函数不适合
tailrec
使用,因为最后一个操作不是对该函数的调用(C
),而是一个求和操作。
关于kotlin - 用Kotlin在1行中编写简单的for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43048846/