递归方法调用在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) 个答案