题目:
查找斐波纳契数列中第 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即为所得。