在Kotlin中以1行编写简单的循环

时间:2017-03-27 14:14:42

标签: 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? */}

1 个答案:

答案 0 :(得分:4)

您可以将Java代码复制到IntelliJ IDEA中,然后将其转换为Kotlin代码,然后您可以将0..n - 1更改为0 until n(感谢fredoverflow),将for循环替换为{ {3}},内联result,将if表达式替换为return,最后将其转换为表达式主体:

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

请注意,此函数不符合sumBy{}的条件,因为最后一个操作不是对函数的调用(C),而是一个求和操作。