• kotlin递归&尾递归优化


     递归:

    对于递归最经典的应用当然就是阶乘的计算啦,所以下面用kotlin来用递归实现阶乘的计算:

    编译运行:

    那如果想看100的阶乘是多少呢?

    应该是结果数超出了Int的表述范围,那改成Long型再试下:

    呃~~还是显示为0,那就没有方法能看到100的阶乘是多少了么,当然有!!这时需要用到另外一个数据类型啦,貌似平常没怎么用到过,如下:

    好大~~

    尾递归优化:
    这里再用递归来实现数字的累加,其规则跟阶乘类似:1的累加=1、2的累加=2+1、3的累加=3+2+1、4的累加=4+3+2+1,实现当然so easy啦:

    那100000它的累加结果是多少呢?

    那是递归多少次就崩掉了呢,打印个日志看一下:

    那如何解决能看到十万数的累加结果呢?如果是java貌似木有太好的办法,但是!!在kotlin中出现了一个尾递归能解决这个问题,具体做法:

    但是报警告了,看一下:

    这里要说明一下:要使用尾递归来对递归做优化的话,需要return的代码必须是调用函数本身,而目前的代码是这样:

    那如何改造一下下呢?

    先来用100看一下输出是否准确:

    计算机第100次运算,result=0
    计算机第99次运算,result=100
    计算机第98次运算,result=199
    计算机第97次运算,result=297
    计算机第96次运算,result=394
    计算机第95次运算,result=490
    计算机第94次运算,result=585
    计算机第93次运算,result=679
    计算机第92次运算,result=772
    计算机第91次运算,result=864
    计算机第90次运算,result=955
    计算机第89次运算,result=1045
    计算机第88次运算,result=1134
    计算机第87次运算,result=1222
    计算机第86次运算,result=1309
    计算机第85次运算,result=1395
    计算机第84次运算,result=1480
    计算机第83次运算,result=1564
    计算机第82次运算,result=1647
    计算机第81次运算,result=1729
    计算机第80次运算,result=1810
    计算机第79次运算,result=1890
    计算机第78次运算,result=1969
    计算机第77次运算,result=2047
    计算机第76次运算,result=2124
    计算机第75次运算,result=2200
    计算机第74次运算,result=2275
    计算机第73次运算,result=2349
    计算机第72次运算,result=2422
    计算机第71次运算,result=2494
    计算机第70次运算,result=2565
    计算机第69次运算,result=2635
    计算机第68次运算,result=2704
    计算机第67次运算,result=2772
    计算机第66次运算,result=2839
    计算机第65次运算,result=2905
    计算机第64次运算,result=2970
    计算机第63次运算,result=3034
    计算机第62次运算,result=3097
    计算机第61次运算,result=3159
    计算机第60次运算,result=3220
    计算机第59次运算,result=3280
    计算机第58次运算,result=3339
    计算机第57次运算,result=3397
    计算机第56次运算,result=3454
    计算机第55次运算,result=3510
    计算机第54次运算,result=3565
    计算机第53次运算,result=3619
    计算机第52次运算,result=3672
    计算机第51次运算,result=3724
    计算机第50次运算,result=3775
    计算机第49次运算,result=3825
    计算机第48次运算,result=3874
    计算机第47次运算,result=3922
    计算机第46次运算,result=3969
    计算机第45次运算,result=4015
    计算机第44次运算,result=4060
    计算机第43次运算,result=4104
    计算机第42次运算,result=4147
    计算机第41次运算,result=4189
    计算机第40次运算,result=4230
    计算机第39次运算,result=4270
    计算机第38次运算,result=4309
    计算机第37次运算,result=4347
    计算机第36次运算,result=4384
    计算机第35次运算,result=4420
    计算机第34次运算,result=4455
    计算机第33次运算,result=4489
    计算机第32次运算,result=4522
    计算机第31次运算,result=4554
    计算机第30次运算,result=4585
    计算机第29次运算,result=4615
    计算机第28次运算,result=4644
    计算机第27次运算,result=4672
    计算机第26次运算,result=4699
    计算机第25次运算,result=4725
    计算机第24次运算,result=4750
    计算机第23次运算,result=4774
    计算机第22次运算,result=4797
    计算机第21次运算,result=4819
    计算机第20次运算,result=4840
    计算机第19次运算,result=4860
    计算机第18次运算,result=4879
    计算机第17次运算,result=4897
    计算机第16次运算,result=4914
    计算机第15次运算,result=4930
    计算机第14次运算,result=4945
    计算机第13次运算,result=4959
    计算机第12次运算,result=4972
    计算机第11次运算,result=4984
    计算机第10次运算,result=4995
    计算机第9次运算,result=5005
    计算机第8次运算,result=5014
    计算机第7次运算,result=5022
    计算机第6次运算,result=5029
    计算机第5次运算,result=5035
    计算机第4次运算,result=5040
    计算机第3次运算,result=5044
    计算机第2次运算,result=5047
    计算机第1次运算,result=5049

    呃,100的累加值照理不是5050的嘛,那结果少了一个1,这时应该更改一下条件了,当第0次运算的时候还得加上它才行:

    这次结果对了,那再来算一下10万数的结果:

    可以kotlin真的挺强大的~

  • 相关阅读:
    字符串右移n位(C++实现)
    字符串反转实现(C++)
    MSDN无法显示该页的解决办法
    设计模式——单例模式 (C++实现)
    设计模式——工厂模式 (C++实现)
    设计模式课程 设计模式精讲 24-2 中介者模式coding
    设计模式课程 设计模式精讲 25-1 责任链模式讲解
    设计模式课程 设计模式精讲 23-3 命令模式源码解析
    设计模式课程 设计模式精讲 23-2 命令模式coding
    设计模式课程 设计模式精讲 22-3 备忘录模式源码解析
  • 原文地址:https://www.cnblogs.com/webor2006/p/7895531.html
Copyright © 2020-2023  润新知