什麽是斐波拉契数列?
斐波拉契数列特点是第N项总是等于前两项之和;
一般是从第一项和第二项都是1开始:例如
1 1 2 3 5 8 13 21 34 55 59....................
求解斐波拉契数列一直是C语言基础的常见问题,一般题目大概分为三种:
问题1.编写一个程序,用户输入整数 N,程序输出第 N 项斐波那契数;
如输入N=7 ,运行结果是:13
问题2.编写一个程序,用户输入整数 N,程序打印前 N 项斐波那契数;
如输入N=7 ,运行结果是:1 1 2 3 5 8 13
问题3.编写一个程序,用户输入整数 N,程序输出前 N 项斐波那契数之和;
如输入N=7 ,运行结果是:1 + 1 + 2 + 3 + 5 + 8 + 13 = 33
这三类问题其实解法都一样,求解方法有两种,迭代法(又称循环法)和递归法;
方法一:迭代法(又称循环法)*************************
#include<stdio.h>
//迭代法(循环法)
int main()
{
int n = 0,n_dis=0,total=0;
int ret = 0;
int bef1 = 1;
int bef2 = 0;
printf("输入要求的斐波拉契数列项数:");
scanf("%d", &n);
n_dis = n;
while(n>0)
{
n = n - 1;
bef2 = bef1;
bef1 = ret;
ret = bef1 + bef2;
total = total + ret;//计算前n项和
printf("%d\n", ret);//如果不需要打印前n项每个数,则删除这句
}
printf("第%d项 = %d\n",n_dis,ret);
printf("前%d项和 = %d\n",n_dis,total);
return 0;
}
linux下运行结果:
方法一:递归法*************************
#include<stdio.h>
//递归法
int fibonacci(int n)//可以求出第n项的值
{
if(n<=0)//检测输入不对的数
{
return 0;
}
if(n==1 || n==2)
{
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
}
int main(void)
{
int n = 0,total=0;;
int i = 1;
int ret = 0;
printf("输入要求的斐波拉契数列项数:");
scanf("%d", &n);
for(i=1;i<=n;i++)
{
ret = fibonacci(i);
total = total + ret;//计算前n项和
printf("%d\n",ret);//如果不需要打印前n项每个数,则删除这句
}
printf("第%d项 = %d\n",n,ret);
printf("前%d项和 = %d\n",n,total);
return 0;
}
linux下运行结果: