斐波那契数列引发的思考 Kotlin

探讨使用Kotlin编程语言实现斐波那契数列过程中遇到的整数溢出问题,及其对算法正确性的潜在影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述:编写程序并输出斐波那契数列前100项。

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。——百度百科

我们用编程代码写出这个程序也是极为简单的,下面直接贴Kotlin代码了。

fun main(args: Array<String>) {
    var a1 = 1
    var a2 = 1
    print("$a1 $a2 ")
    for (i in 3..100){
        val a3 = a1 + a2
        print("$a3 ")
        a1 = a2
        a2 = a3
    }
}

输出结果:

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 -1323752223 512559680 -811192543 -298632863 -1109825406 -1408458269 1776683621 368225352 2144908973 -1781832971 363076002 -1418756969 -1055680967 1820529360 764848393 -1709589543 -944741150 1640636603 695895453 -1958435240 -1262539787 1073992269 -188547518 885444751 696897233 1582341984 -2015728079 -433386095 1845853122 1412467027 -1036647147 375819880 -660827267 -285007387 -945834654 -1230842041 2118290601 887448560 -1289228135 -401779575 -1691007710 -2092787285 511172301 -1581614984 -1070442683 1642909629 572466946 -2079590721 -1507123775 708252800 -798870975 -90618175 -889489150 -980107325 

细心的同学可能发现了输出的后几项竟然有负数!?正数相加怎么可能会产生负数呢?我们发现符号是从1836311903后开始的。我们来还原一下:

// 在上面的循环中我们加入这条语句看看
if (a3 < 0) {
            println("\ni = $i a1 = $a1 a2 = $a2 ")
            println(Int.MAX_VALUE)	
            break
        }
//输出:i = 47 a1 = 1134903170 a2 = 1836311903 
//输出:2147483647

可见,出现负数的原因是因为a1+a2的值超过了int的范围
我们可以通过修改它的精度等方式来修改我们的代码。这一结果也告诉我们,在编程的时候你的算法没有问题不一定结果就一定没有问题,有时还要注意选取合适的数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值