用C语言求解第N项斐波那契数列问题
目录
- 求解第N项斐波那契数列
- 求解斐波那契数列的前n项并输出及兔子繁殖问题
- 斐波那契数列的定义
- 算法思路
- 代码实现
- 兔子繁殖问题
求解第N项斐波那契数列
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...
这个数列从第3项开始,每一项都等于前两项之和。斐波那契数列,又称黄金分割数列,显然它又是一个线性递推数列,由数学家莱昂纳多·斐波纳契首次引入此概念。在现代的物理,化学,生物等诸多领域,皆有重大影响。
在此求解过程中,我用了if 语句和for循环。话不多说,我就直接上代码了。
#include<stdio.h> //1,1,2,3,5,8,13,21,34 int main(void) { int n, i; int f1, f2, f3; f1=1; f2=1; printf("请输入您需要求的序列:"); scanf("%d",&n); if(n==1) { f3=1; } else if(n==2) { f3=1; } else { for(i=3; i<=n; i++) { f3 = f1 + f2; f1 = f2; f2 = f3; } } printf("%d\n",f3); return 0; }
求解斐波那契数列的前n项并输出及兔子繁殖问题
斐波那契数列的定义
F1=1
F2=1
…
Fn=F(n-1)+F(n-2)
从第三项开始每一项的值都等于前一项加上前两项的和。
算法思路
可以使用整型数组来存储每一项的值,前两项不能使用Fn的通项公式,所以得和其他项区别计算,当输入总项数n后,我们定义一个大小为n的整型数组,然后使用一个for循环去计算从1到n的数列值,其中需要嵌套一个switch选择语句用于区别前两项和其他项的计算,switch语句后再加上一个printf输出函数用于输出每一项的数列值。
代码实现
#include<stdio.h> void main() { int n; printf("请输入需求的斐波那契数列总项数:\n"); scanf("%d",&n); system("cls");//清屏输出结果 int f[n];//定义整型数组来存储每一项数列的值 for(int i=0;i<n;i++) { switch(i) { case 0: f[i]=1;//第一项值为1 break; case 1: f[i]=1;//第二项值为2 break; default: f[i]=f[i-1]+f[i-2]; break; } printf("F%d=%d\n",i+1,f[i]);//因为数组的下标从0开始,数列的下标从1 //开始,所以i需要加1. } }
输出结果:
F1=1
F2=1
F3=2
F4=3
F5=5
F6=8
F7=13
F8=21
F9=34
F10=55
F11=89
F12=144
兔子繁殖问题
(1) 问题描述
兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
(2) 问题分析
第一个月只有一对兔子,而且前两个月还没有繁殖能力,所以第一个月和第二个月的兔子对数都为1,分别记为F1=1,F2=1,到了第三个月,第一个月的兔子繁殖出了一对新兔子此时F3=2,第四个月,第一个月的兔子继续繁殖出一对新兔子,而第三个月繁殖出的新兔子还没有繁殖能力,所以F4=3,依次类推,不难发现这是一个斐波那契数列,所以繁殖一年(12个月)后兔子对数为F12=144。注意第十三个月不能算入内。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。