64,634
社区成员
发帖
与我相关
我的任务
分享
【问题】编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。斐波那契数列为:0、1、1、2、3、……,即: fib(0)=0; fib(1)=1; fib(n)=fib(n-1)+fib(n-2) (当n>1时)。
# include <stdio.h>
long Fibonacci(long first, long second, long n );//递归的方法
long Fibonacci_(long first, long second, long n );//递推的方法
void main()
{
long a = 0, b = 1, c = 45;
for(long i = 0; i <= c; i++)
{
printf("i=%ld.c=%ld,Fibonacci_=%ld\n", i,c, Fibonacci_(a, b, i));
}
for(long i = 0; i <= c; i++)
{
printf("i=%ld.c=%ld,Fibonacci=%ld\n", i,c, Fibonacci(a, b, i));
}
getchar();
}
long Fibonacci(long first, long second, long n)//递归的方法
{
if(0 == n) return first;
else if(1 == n)
return second;
else
{ return Fibonacci(first,second,(n - 1))+Fibonacci(first,second,(n - 2));
}
}
long Fibonacci_(long first, long second, long n )//递推的方法
{
long a = 0, b = 1, c = 0;
if(0 == n)
return first;
else if(1 == n)
return second;
else
{
for(long i = 0; i <= (n - 2); i++)
{
c = a +b;
a = b;
b = c;
} return c;
}
}
由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法
时,通常按递推算法编写程序。例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前
两项计算出下一项,直至计算出要求的第n项。 ==>你可以尝试运行一下