有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

递归方法调用在kotlin中导致StackOverflower错误,但在java中没有

我在java和kotlin中有两个几乎相同的代码

Java:

public void reverseString(char[] s) {
    helper(s, 0, s.length - 1);
}

public void helper(char[] s, int left, int right) {
    if (left >= right) return;
    char tmp = s[left];
    s[left++] = s[right];
    s[right--] = tmp;
    helper(s, left, right);
}

科特林:

fun reverseString(s: CharArray): Unit {
    helper(0, s.lastIndex, s)
}

fun helper(i: Int, j: Int, s: CharArray) {
    if (i >= j) {
        return
    }
    val t = s[j]
    s[j] = s[i]
    s[i] = t
    helper(i + 1, j - 1, s)
}

java代码以巨大的输入通过了测试,但kotlin代码会导致StackOverFlowError,除非我在kotlin中的helper函数之前添加了tailrec关键字

我想知道为什么这个函数在java和kolin中使用tailrec,但在kotlin中不使用tailrec

p.S: 我知道你在做什么


共 (0) 个答案