斐波那契详解


title: 斐波那契数列
date: 2019-05-29 20:35:10
tags: algorithms


比较几种实现方法

解法描述
一般非递归仅能计算到第48个斐波那契数,但耗时比第二种快
一般递归仅能计算到第48个斐波那契数,但数量级越大越耗时
大数非递归能计算任意一个斐波那契数
大数递归能计算任意一个斐波那契数,但数量级越大越耗时

非递归一般解法

public static int fibonacci(int n) {
    int a = 1;
    int b = 1;
    int c = 1;
    for (int i = 3; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    return c;
}

一般递归解法

public static int recursionFibonacci(int n) {
    if (n <= 2) {
        return 1;
    }
    return recursionFibonacci(n - 1) + recursionFibonacci(n - 2);
}

大数非递归解法

public static BigDecimal bigDecimalFibonacci(int n) {
    BigDecimal a = new BigDecimal(1);
    BigDecimal b = new BigDecimal(1);
    BigDecimal c = new BigDecimal(1);
    for (int i = 3; i <= n; i++) {
        c = a.add(b);
        a = b;
        b = c;
    }
    return c;
}

大数递归解法

public static BigDecimal recursionBigDecimalFibonacci(int n) {
    if (n <= 2) {
        return new BigDecimal(1);
    }
    return recursionBigDecimalFibonacci(n - 1).add(recursionBigDecimalFibonacci(n - 2));
}
下面列出前100个斐波那契数

1->1
2->1
3->2
4->3
5->5
6->8
7->13
8->21
9->34
10->55
11->89
12->144
13->233
14->377
15->610
16->987
17->1597
18->2584
19->4181
20->6765
21->10946
22->17711
23->28657
24->46368
25->75025
26->121393
27->196418
28->317811
29->514229
30->832040
31->1346269
32->2178309
33->3524578
34->5702887
35->9227465
36->14930352
37->24157817
38->39088169
39->63245986
40->102334155
41->165580141
42->267914296
43->433494437
44->701408733
45->1134903170
46->1836311903
47->2971215073
48->4807526976
49->7778742049
50->12586269025
51->20365011074
52->32951280099
53->53316291173
54->86267571272
55->139583862445
56->225851433717
57->365435296162
58->591286729879
59->956722026041
60->1548008755920
61->2504730781961
62->4052739537881
63->6557470319842
64->10610209857723
65->17167680177565
66->27777890035288
67->44945570212853
68->72723460248141
69->117669030460994
70->190392490709135
71->308061521170129
72->498454011879264
73->806515533049393
74->1304969544928657
75->2111485077978050
76->3416454622906707
77->5527939700884757
78->8944394323791464
79->14472334024676221
80->23416728348467685
81->37889062373143906
82->61305790721611591
83->99194853094755497
84->160500643816367088
85->259695496911122585
86->420196140727489673
87->679891637638612258
88->1100087778366101931
89->1779979416004714189
90->2880067194370816120
91->4660046610375530309
92->7540113804746346429
93->12200160415121876738
94->19740274219868223167
95->31940434634990099905
96->51680708854858323072
97->83621143489848422977
98->135301852344706746049
99->218922995834555169026
100->354224848179261915075

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值