题目:定义Fibonacci数列如下:
/ 0 n=0
f(n)= 1 n=1
\ f(n-1)+f(n-2) n=2
输入n,用最快的方法求该数列的第n项。
分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。
/ 0 n=0
f(n)= 1 n=1
\ f(n-1)+f(n-2) n=2
输入n,用最快的方法求该数列的第n项。
分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。
因此很多程序员对这道题的递归解法非常熟悉,但....呵呵,你知道的。。
#include "stdlib.h"
#include "stdio.h"
//Using recursion method to implement
int Fibonacci(int n){
if(n == 0)
return 0;
else if(n == 1)
return 1;
else
return Fibonacci(n-1) + Fibonacci(n-2);
}
//Using non recursion method to implement
int Fibonacci_1(int n){
if(n == 0)
return 0;
if(n == 1)
return 1;
int fb = 0;
int fa = 1;
int f_now = 0;
for(int i=2; i<=n; ++i){
f_now = fa + fb;
fb = fa;
fa = f_now;
}
return f_now;
}
#define maxSize 1000
//Using non recursion method to implement
int Fibonacci_2(int n){
if(n == 0)
return 0;
if(n == 1)
return 1;
int f[maxSize] = {0};
f[1] = 1;
int i;
for(i=2; i<=n; ++i){
f[i] = f[i-1] + f[i-2];
}
return f[i-1];
}
void main(){
printf("%d \n", Fibonacci_2(5));
}