Fibonacci Numbers(点击打开链接)
0,1,1,2,3,4,8,13,21,34,...
Program 1 (iterative algorithm):
unsigned int Fibonacci(unsigned int n)
{
int previous = -1;
int result = 1;
for (unsigned int i = 0; i <= n; ++i)
{
int const sum = previous + result;
previous = result;
result = sum;
}
return result;
}
该程序是根据定义,使用iterative algorithm实现的,通过前两项相加产生新的项。对于初始值的设定(previous = -1; result = 1),可以同分析Fibonacci数列的前3项,进行反向推导即可。(result + 0 = 1 --> result = 1) (previous + result = 0 ---> previous = -1)
使用Asymptotic analysis可知,该程序的big Oh表达式为: O(n)
Program 2 (recursive algorithm):
unsigned int Fibonacci(unsigned int n)
{
if (n == 0 || n == 1)
return n;
else
return Fibonacci(n-1) + Fibonacci(n-2);
}
这个是递归算法,它是呈指数增长的,参考
点击打开链接