Fibionacci数列有如下特点:前两个数都为1,从第三个数开始,该数是前两个数之和。
即:
F1=1;(n=1)
F2=1;(n=2)
Fn=Fn-1+Fn-2;(n>2)
下面给出几种求法:
解法一:
#include <stdio.h>
int fib(int n)
{
int fib1 =1;
int fib2 =1;
int fib = 1;
int i = 0;
while (n > 2)
{
fib1 = fib1 + fib2;
fib2 = fib1 - fib2;
n--;
}
return fib1 ;
}
int main()
{
int n = 0;
int ret =0;
printf("请输入要求 Fibionacci 数列的第几个数:\n");
scanf("%d", &n);
ret = fib(n);
printf("%d \n", ret);
system("pause");
return 0;
}
解法二:
int fib(int n)
{
int fib1 =1;
int fib2 =1;
int fib = 1;
int i = 0;
while (n > 2)
{
fib = fib1 + fib2;
fib1 = fib2;
fib2 = fib;
n--;
}
return fib ;
}
测试方法同上,这里不再重复写
解法三:
除了上述方法外,还可以使用递归的方式
int fib(int n)
{
if (n <= 2)
return 1;
else
{
return fib(n - 1) + fib(n - 2);
}
}
但是请注意,递归的方法虽然代码简单,可读性强,但不是最好的办法,因为在递归调用时涉及到运行时开销,参数必须被压到堆栈,为局部变量分配内存空间,当递归太深时,会出现栈溢出。对于这个程序而言,当所求n较大时,递归函数并不会简化问题。