您的位置:首页 > 其它

斐波那契数列(兔子数列)

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 计时类.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: