斐波那契数列计算公式为: 


    f(n) = f(n-1)+ f(n-2)    


基于此写了一个方法,用于输出一个长度为指定的斐波那契数列(从正数1开始, 即1,1 ,2 ,3 ,5 ....):

static void fn(int t){
         List<Integer> al = new ArrayList<Integer>();
         for (int a = al.size(); a < t;a++){
            if (al.size() == 0) {
                al.add(1);
            }
            else if (al.size() == 1) {
                al.add(1);
            }
            else if (al.size() == 2){
                al.add(2);
            }
            else{
                int sum = al.get(a-1)+al.get(a-2);
                System.out.println("上一个数的值为:  "+al.get(a-1) + "  倒数第二个数的值为:  " + al.get(a-2)+ "  他们的和为:  "+ sum);
                al.add(al.get(a-1)+al.get(a-2));
            }
         }
        System.out.println(al);
    }

当调用fn(10)时程序执行正常,输出结果为:

上一个数的值为:  2  倒数第二个数的值为:  1  他们的和为:  3
上一个数的值为:  3  倒数第二个数的值为:  2  他们的和为:  5
上一个数的值为:  5  倒数第二个数的值为:  3  他们的和为:  8
上一个数的值为:  8  倒数第二个数的值为:  5  他们的和为:  13
上一个数的值为:  13  倒数第二个数的值为:  8  他们的和为:  21
上一个数的值为:  21  倒数第二个数的值为:  13  他们的和为:  34
上一个数的值为:  34  倒数第二个数的值为:  21  他们的和为:  55
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]


当调用fn(100)时程序执行异常,结果为:

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


可以看到结果中正数相加计算出了负数,导致了计算的结果有异常,造成这个结果的原因为:

    java中int的定义:

            

        public static final int MAX_VALUE

最大值定义为: 2的32次方减一 即2147483647

以上答案变为负数时的和为: 1836311903 + 1134903170 = 2971215073


2971215073 已经大于 2147483647 超过了int最大值造成了异常