Fibonacci数列:f[0] = 0, f[1] = 1, 以及当n > 1时, f[n] = f[n-1] + f[n-2]。
注意:所有算法本身并非原创,以下3种算法均正确,通过条件编译。
性能:递归实现代码较为简单,但函数调用有时间和空间消耗;第一次调用,都需要在栈中分配空间保存形参和局部变量,返回地址,而且往栈中压入和弹出数据都需要时间。效率不如循环。
#include <stdio.h>
#include <stdlib.h>
#define MALLOC(p, n) \
if(!(p = malloc(n))){ \
perror("Insufficient memorry"); \
}
/* recursively递归实现 */
#if 0
unsigned int fibonacci(unsigned int n)
{
if(0 == n){
return 0;
}
else if(1 == n){
return 1;
}
else
return fibonacci(n-1) + fibonacci(n-2);
}
#endif
/* inrecrsively array非递归数组实现 */
#if 0
unsigned int fibonacci(unsigned int n)
{
unsigned int i, *p = NULL;
MALLOC(p, n*sizeof(unsigned int));
if(0 &#