斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……
在C语言中,可以使用递归和非递归的方法实现求第n个斐波那契数。
(1)递归方法
#include<stdio.h>
#include<stdlib.h>
int Fib(int n)
{
if(n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = Fib(n);
printf("第%d个斐波那契数是:%d\n",n,ret);
system("pause");
return 0;
}
可以看出递归方法十分简洁明了,但该问题使用递归存在缺陷,如果n值较大,计算效率相当低。亲测在计算第45个斐波那契数时,用时16秒,所以在解决该问题时更适合采用非递归方法。
(2)非递归方法
#include<stdio.h>
#include<stdlib.h>
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 0;
if (n <= 2)
return 1;
else
{
while(n > 2)
{
c = a + b;
a = b;
b = c;
n --;
}
}
return c;
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = Fib(n);
printf("第%d个斐波那契数是:%d\n",n,ret);
system("pause");
return 0;
}
同样地,采用非递归方法求第45个斐波那契数也就是一瞬间的事情。所以使用递归方法时需谨慎。