斐波那契数列(兔子数列)
2007-11-11 22:10
204 查看
常见题,如:在数列 1, 1, 2, 3, 5, 8, 13, 21...... 中,求数列中的第 10 个数.
上面例子中使用的数列叫做 斐波那契数列.
斐波那契数列的规律是: 从第三个数开始,每一个数都等于它前面两个数的和.
在 .Net 中计算 斐波那契数列 以及性能比较:
1 //斐波那契数列 三种求解
2 class Program
3 {
4 //算术运算
5 public long Fibanocci1(long n)
6 {
7 if (n == 1 || n == 0) return n;
8 double a = 0.5 * (Math.Sqrt(5) - 1);
9 double b = 0.5 * (Math.Sqrt(5) + 1);
10 double c = Math.Sqrt(5);
11 return (long)((Math.Pow(a, n) + Math.Pow(b, n)) / c);
12
13 }
14 //循环
15 public long Fibanocci2(long n)
16 {
17 if (n == 1 || n == 0) return n;
18 long i = 0, a = 0, b = 1;
19 while (i < n)
20 {
21 b = a + b;
22 a = b - a;
23 i++;
24 }
25 return a;
26 }
27 //递归
28 public long Fibanocci3(long n)
29 {
30 if (n < 3) return 1;
31 return Fibanocci3(n - 1) + Fibanocci3(n - 2);
32 }
33 static void Main(string[] args)
34 {
35 Stopwatch watch = new Stopwatch(); // 计时类
36
37 Program proc = new Program();
38 long result; //保存结果
39 long num = 20; // 在数列中找第 num 位数。
40 watch.Start();
41 result = proc.Fibanocci1(num);
42 watch.Stop();
43 Console.WriteLine("Fibanocci1(算术) = {0}, 耗时: {1} ms.", result, watch.ElapsedMilliseconds);
44 watch.Reset();
45
46 watch.Start();
47 result = proc.Fibanocci2(num);
48 watch.Stop();
49 Console.WriteLine("Fibanocci2(循环) = {0}, 耗时: {1} ms.", result, watch.ElapsedMilliseconds);
50 watch.Reset();
51
52 watch.Start();
53 result = proc.Fibanocci3(num);
54 watch.Stop();
55 Console.WriteLine("Fibanocci3(递归) = {0}, 耗时: {1} ms.", result, watch.ElapsedMilliseconds);
56 watch.Reset();
57 Console.Read();
58 }
59 }
上述代码使用到 .Net 2.0 的 Stopwatch 计时类.
上面例子中使用的数列叫做 斐波那契数列.
斐波那契数列的规律是: 从第三个数开始,每一个数都等于它前面两个数的和.
在 .Net 中计算 斐波那契数列 以及性能比较:
1 //斐波那契数列 三种求解
2 class Program
3 {
4 //算术运算
5 public long Fibanocci1(long n)
6 {
7 if (n == 1 || n == 0) return n;
8 double a = 0.5 * (Math.Sqrt(5) - 1);
9 double b = 0.5 * (Math.Sqrt(5) + 1);
10 double c = Math.Sqrt(5);
11 return (long)((Math.Pow(a, n) + Math.Pow(b, n)) / c);
12
13 }
14 //循环
15 public long Fibanocci2(long n)
16 {
17 if (n == 1 || n == 0) return n;
18 long i = 0, a = 0, b = 1;
19 while (i < n)
20 {
21 b = a + b;
22 a = b - a;
23 i++;
24 }
25 return a;
26 }
27 //递归
28 public long Fibanocci3(long n)
29 {
30 if (n < 3) return 1;
31 return Fibanocci3(n - 1) + Fibanocci3(n - 2);
32 }
33 static void Main(string[] args)
34 {
35 Stopwatch watch = new Stopwatch(); // 计时类
36
37 Program proc = new Program();
38 long result; //保存结果
39 long num = 20; // 在数列中找第 num 位数。
40 watch.Start();
41 result = proc.Fibanocci1(num);
42 watch.Stop();
43 Console.WriteLine("Fibanocci1(算术) = {0}, 耗时: {1} ms.", result, watch.ElapsedMilliseconds);
44 watch.Reset();
45
46 watch.Start();
47 result = proc.Fibanocci2(num);
48 watch.Stop();
49 Console.WriteLine("Fibanocci2(循环) = {0}, 耗时: {1} ms.", result, watch.ElapsedMilliseconds);
50 watch.Reset();
51
52 watch.Start();
53 result = proc.Fibanocci3(num);
54 watch.Stop();
55 Console.WriteLine("Fibanocci3(递归) = {0}, 耗时: {1} ms.", result, watch.ElapsedMilliseconds);
56 watch.Reset();
57 Console.Read();
58 }
59 }
上述代码使用到 .Net 2.0 的 Stopwatch 计时类.
相关文章推荐
- 对斐波那契数列(兔子数列)的学习
- 斐波那契数列(兔子数列)
- 斐波那契数列【黄金分割数列】-兔子问题
- 斐波那契数列(兔子数列)
- js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角
- MOOC清华《程序设计基础》第6章:三种递推方法求兔子数列问题(斐波那契数列)
- 斐波那契数列(兔子数列)计算函数式
- 斐波那契数列(兔子数列)
- Python 实现斐波那契数列 (黄金分割数列)
- 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 兔子的规律为数列1,1,2,3,5,8,13,21...
- 产生斐波那契数列,数列长度随机生成
- HDU 1588 斐波那契数列数列变形和矩阵连乘
- 斐波那契数列(兔子问题)的变形
- 用循环和递归得到兔子数列
- 神奇的兔子数列
- 斐波那契数列问题-兔子繁衍问题-c语言-c++-经典问题-编程
- java实现斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39
- 不用递归方法实现斐波那契数列,输入数字n 将会输出该数列的第n个数字
- 递归解决-兔子问题-斐波那契数列
- java兔子问题(斐波那契数列)