题目:定义Fibonacci数列如下:
/ 0 n=0
f(n)= 1 n=1
/ f(n-1)+f(n-2) n=2
输入n,用最快的方法求该数列的第n项。
分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。
因此很多程序员对这道题的递归解法非常熟悉,但....呵呵,你知道的。。
这里用到递归,对于输入的你很小时,时间可以接受。但要是输入的n很大是,时间花的较长。
#include <iostream>
int Fibonacci(int n);
int main()
{
int n = 10;
int b = Fibonacci(20);
return 0;
}
int Fibonacci(int n)
{
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}
这是斐波那契数列的通项公式,求值比较快。
用循环实现:
#include <iostream>
int Fibonacci(int n);
int main()
{
int n = 10;
int b = Fibonacci(30);
return 0;
}
int Fibonacci(int n)
{
if (n==0)
return 0;
if (n==1)
return 1;
int i=2;
int a=0; //存储f(n-1)
int b=1; //存储f(n)
int c=0;
while (n>=i)
{
c = a + b ;
a = b ;
b = c ;
i++;
}
return c;
}