数据结构实例<二>(斐波那契数列)入门

来源:互联网 发布:换手率炒股软件 编辑:程序博客网 时间:2024/05/20 13:05

题目:

查找斐波纳契数列中第 N 个数。

所谓的斐波纳契数列是指:

  • 前2个数是 0 和 1 。
  • 第 i 个数是第 i-1 个数和第i-2 个数的和。

斐波纳契数列的前10个数字是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

* 无论递归还是非递归讨论的总是三种情况:n<=0   0<n<=2   n>2 

*特殊讨论为0  1这两种情况。

*0是第0个元素且是第0个元素的值。

*1的情况有两种,第1个和第2个。


递归算法:

/// <summary>        ///     递归算法        /// </summary>        /// <param name="n"></param>        /// <returns></returns>        public int Fibonacci(int n)        {            if (n <= 0)            {                return 0;            }            if (n > 0 && n <= 2)            {                return 1;            }            return this.Fibonacci(n - 1) + this.Fibonacci(n - 2);        }


*递归算法容易理解,嵌套调用Function直至返回结果。(有条件的可以 单步调试即可理解!)

非递归算法:


public static int GeneralFibonacci(int n)        {            int sum = 0;            //穷举第一个和第二个数列元素            int item1 = 1;            int item2 = 1;            if (n <= 0)            {                return sum;            }            if (n > 0 && n <= 2)            {                sum = 1;                return sum;            }            //循环变量应该从0开始长度为n-2 (总长n - 两个穷举数列2)            for (int i = 0; i < n - 2; i++)            {                sum = item1 + item2;                item1 = item2;                item2 = sum;            }            return sum;        }
*非递归算法重要的地方再议循环这部分。
1.首先穷举第1和第2两个元素。
2.确定循环长度n-2  
3. 等价替换sum 直至循环结束 sum即为所得。

0 0