斐波那契数列实现
程序员文章站
2022-03-13 13:47:58
...
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........。这个数列从第3项开始,每一项都等于前两项之和。
方法一:迭代实现(打印前40个数列值)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int a[40];
a[0] = 0, a[1] = 1;
printf("%d %d ",a[0],a[1]);
for(i=2; i<40;i++)
{
a[i]=a[i-1]+a[i-2];
printf("%d ",a[i];
}
return 0;
}
方法一改进:方法一数列从0开始打印,而实际斐波那契数列是从1开始的
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=0;
printf("输入需要打印几个数列值:");
scanf("%d",&n);
int *fib=(int*)malloc(n*sizoef(int));
*fib=1;
*(fib+1)=1;
printf("%d %d ",*fib,*(fib+1));
for(int i=2;i<n;i++)
{
*(fib+i)=*(fib+i-1)+*(fib+i-2);
printf("%d ",*(fib+i));
}
free(fib);
return 0;
}
方法二:递归实现:
#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;
printf("请输入打印几个数列值:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("%d ",Fib(i));
}
return 0;
}
方法二递归实现效率低下,应尽量不用递归,用迭代