0
点赞
收藏
分享

微信扫一扫

【Android】app中阻塞的looper为什么可以响应touch事件

承蒙不弃 2024-01-22 阅读 12

函数式编程中,重要的概念 尾递归
当一个函数,在函数最后调用 自身,称为 尾递归,是一种特殊的递归函数。

尾递归函数 可以避免 StackOverflowError 的风险。原理是:
通过编译器优化 为 循环GOTO跳转,代替 原来递归调用。

Kotlin 使用 tailrec 声明尾递归函数。

举例

tailrec fun sum(top: Long, initValue: Long): Long {
    return if (top <= 0) {
        initValue
    } else {
        sum(top - 1, initValue + top)
    }
}

fun main(args: Array<String>) {
    // 计算 100万 数字累加之和
    println("sum: ${sum(1_000_000L, 0)}")
}

说明:

1. idea 查看 编译代码,Show Kotlin Bytecode -> Decompile

尾递归优化成while循环

2. 尝试把 tailrec 去掉,运行会 java.lang.StackOverflowError 错误

文档

  • Tail recursive functions | Kotlin
  • Tail call
举报

相关推荐

0 条评论