斐波那契数列
公式:f(n) = f(n - 1) + f(n - 2);
描述:如果一个数列中的每个数是前两个数之和,并且前两个数都为1,这样的数列被称之为Fibonacci数列
算法1:递归
#include<stdio.h>
int fib(int i)
{
if(i<2)
return 1;
else
return fib(i-2)+fib(i-1);
}
int main()
{
int i,n;
printf("请输入需求的斐波那契数列的前n项:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf(" %d",fib(i));
}
return 0;
}
算法2:迭代
#include<stdio.h>
int main()
{
int i,n;
int a[15];
a[0]=1;
a[1]=1;
printf("请输入需求的斐波那契数列的前n项:");
scanf("%d",&n);
printf("%d %d",a[0],a[1]);
for(i=2;i<n;i++)
{
a[i]=a[i-1]+a[i-2];
printf(" %d",a[i]);
}
return 0;
}
算法3:动态规划
#include<stdio.h>
int fib1(int n) { // 动态规划不使用数组
int a = 0,b = 1;
int sum,i;
if (n < 2)
return 1;
for (i = 0; i < n; i++)
{
sum = a + b;
a = b;
b = sum;
}
return sum;
}
int fib2(int n) { // 动态规划使用数组
int *a = new int[n+1];
a[0] = 1, a[1] = 1;
for (int i = 2; i < n+1; i++) {
a[i] = a[i - 1] + a[i - 2];
}
return a[n];
}
int main()
{
int j,k;
printf("请输入要求的斐波那契数列:");
scanf("%d",&k);
for(j=0;j<k;j++)
{
printf("%5d",fib1(j));
printf("%5d",fib2(j));
}
}
算法4:
#include <stdio.h>
int main()
{
unsigned long s=0,f1=1,f2=1,f3=1,n=0;
printf("请输入斐波那契数列的第n项:");
scanf("%d",&n);
if(n>2)
for(s=3;s<=n;s++)
{
f3=(f2+f1)%10007;
f1=f2;
f2=f3;
}
printf("%d",f3);
return 0;
}