Giả sử tôi viết code như thế này:Kotlin: Tail đệ quy cho các chức năng hai bên đệ quy
tailrec fun odd(n: Int): Boolean =
if (n == 0) false
else even(n - 1)
tailrec fun even(n: Int): Boolean =
if (n == 0) true
else odd(n - 1)
fun main(args:Array<String>) {
// :(java.lang.StackOverflowError
System.out.println(even(99999))
}
Làm thế nào để tôi nhận được Kotlin để tối ưu hóa các chức năng này đôi bên cùng có đệ quy, vì vậy mà tôi có thể chạy mà không cần main
ném một StackOverflowError? Từ khóa tailrec
hoạt động cho đệ quy hàm đơn, nhưng không có gì phức tạp hơn. Tôi cũng thấy một cảnh báo rằng không có cuộc gọi đuôi nào được tìm thấy khi từ khóa tailrec
được sử dụng. Có lẽ đây là quá khó khăn cho trình biên dịch?
Bạn có thể thêm yêu cầu tính năng vào https://youtrack.jetbrains.com cho tính năng "đệ quy đuôi chung", đó là đặt cược tốt nhất nếu bạn muốn thêm nó vào Kotlin. Cũng tìm kiếm ở đó trước, trong trường hợp nó đã được yêu cầu hoặc lên kế hoạch. –
Tôi tạo ra một vấn đề Kotlin ở đây: https://youtrack.jetbrains.com/issue/KT-11307 – denine99