IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin - 尾递归函数优化 -> 正文阅读

[移动开发]Kotlin - 尾递归函数优化

  • 递归:在函数体中调用函数自身。先执行完所有递归调用(保存了每次调用的状态),用最终拿到的值再往回一步步计算结果。
  • 尾递归:调用自身的语句处于函数体中最后一行,仅调用函数自身不包含其它操作。
  • 递归的问题:使用少量代码完成需要多次重复的计算,算法逻辑容易理解但效率不高,每递归一次就要开辟一个方法栈(函数空间)保存状态,次数过多消耗性能还可能导致内存溢出。而循环迭代就没有这种问题,使用变量每次接收上次计算的结果,避免反复开辟函数空间。
  • 尾递归优化:属于编译期优化,通过 tailrec 关键字修饰,函数符合尾递归便优化,不符合写法则会提醒,消除了内存溢出的担心。由于是最后一行语句,返回后也没有其它操作,不需要保存状态。

1的阶乘:1
2的阶乘:2*1
3的阶乘:3*2*1
4的阶乘:4*3*2*1
5的阶乘:5*4*3*2*1

计算 N 的阶乘:

fun jiecheng(n: BigInteger): BigInteger {    //计算阶乘的结果大大超过Long范围,因此使用Biginteger
    return if (n == BigInteger.ONE)    //1的阶乘结果是1
        BigInteger.ONE
    else
        n * jiecheng(n - BigInteger.ONE)    //n的阶乘是:n*(n-1的阶乘)
}

尾递归优化:

tailrec fun youhua(n: BigInteger, result: BigInteger = BigInteger.ONE): BigInteger {    //添加关键字修饰,result默认值为1
    return if (n == BigInteger.ONE)    //乘1等于本身,所以返回结果
        result
    else
        youhua(n - BigInteger.ONE, n * result)    //最后一行调用自身,不包含计算
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:26:11  更:2022-03-03 16:30:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:39:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码