用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。注意第十三个月不能算入内。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C语言中斐波那契数列的三种实现方式(递归、循环、矩阵)

    目录 一.递归 二.循环 三.矩阵 <剑指offer>里讲到了一种斐波那契数列的 O(logN) 时间复杂度的实现,觉得挺有意思的,三种方法都记录一下. 一.递归 一般来说递归实现的代码都要比循环要简洁,但是效率不高,比如递归计算斐波那契数列第n个元素. long long Fibonacci_Solution1(unsigned int n) { // printf("%d ", n); if (n <= 0) return 0; if (n == 1) retur

  • C语言求Fibonacci斐波那契数列通项问题的解法总结

    一:递归实现   使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. 二:数组实现   空间复杂度和时间复杂度都是0(n),效率一般,比递归来得快. 三:vector<int>实现   时间复杂度是0(n),时间复杂度是0(1),就是不知道vector的效率高不高,当然vector有自己的属性会占用资源. 四:queue<int>实现   当然队列比数组更适合实现斐波那契数列,时间复杂度和空间复杂度和vector<int&g

  • C语言实现斐波那契数列(非递归)的实例讲解

    废话不多说,直接上代码 #include <stdio.h> #include <stdlib.h> void f(int n); int main(void) { f(10); return 0; } void f(int n) { if(n==1) { printf("1\n"); return; } if(n==2) { printf("1 1\n"); return; } printf("1 1 "); int*

  • C语言深入探究斐波那契数列

    目录 一.递归思想 二.空间换时间 三.动态规划 四.通项公式 五.矩阵快速幂 六.总结 本文章参考leetcode斐波那契数官方题解 斐波那契的边界条件是 F(0)=0 和 F(1)=1.当 n>1 时,每一项的和都等于前两项的和,因此有如下递推关系:F(n)=F(n-1)+F(n-2) 一.递归思想 递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止. #include<stdio.h&g

  • C语言数据结构递归之斐波那契数列

    C语言数据结构递归之斐波那契数列 因为自己对递归还是不太熟练,于是做POJ1753的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归.然后就打算先做另一道递归的题(从数组中取出n个元素的组合),但是同样在递归的问题上不太理解.好吧,于是复习CPP,在第229页的时候,看到了斐波那契数列,回想起之前做过的一道题目,发现可以用递归的方法来做.于是决定优化一下之前的代码. 以下这段摘自<C primer plus> 斐波那契数列的定义如下:第一个和第二个数字都

  • C语言新手练习题之求第n个斐波那契数

    目录 前言 一.思路 1.非递归 2.递归 二.源代码以及运行截图 非递归: 递归: 总结 前言 在C语言中,分别用递归和非递归两种方法实现求第n个斐波那契数 一.思路 首先分析一下关于斐波那契数列的原理: 第一个和第二个数都是1,之后的每个数都是前两个数之和,即: 1,1,2,3,5,8,…… 1.非递归 用到了循环相关的知识, 当n>2的时候进入循环,将前两个数相加得到第三个数: 当n<=2的时候跳出循环. 2.递归 观察斐波那契数列可以得到一个公式: 根据这个公式就能进行递归.当n>

  • 用C语言求解第N项斐波那契数列问题

    目录 求解第N项斐波那契数列 求解斐波那契数列的前n项并输出及兔子繁殖问题 斐波那契数列的定义 算法思路 代码实现 兔子繁殖问题 求解第N项斐波那契数列 斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89... 这个数列从第3项开始,每一项都等于前两项之和.斐波那契数列,又称黄金分割数列,显然它又是一个线性递推数列,由数学家莱昂纳多·斐波纳契首次引入此概念.在现代的物理,化学,生物等诸多领域,皆有重大影响. 在此求解过程中,我用了if 语句和for循环.话不多说

  • Python/R语言分别实现斐波那契数列的示例详解

    目录 前言 1.年龄计算 1.1 图解问题 1.2 代码解决 1.3 实验小结 2.斐波那契数列 2.1 图解问题 2.2 代码实现 2.3 实验小结 总结 前言 此专栏为python与R语言对比学习的文章:以通俗易懂的小实验,带领大家深入浅出的理解两种语言的基本语法,并用以实际场景!感谢大家的关注,希望对大家有所帮助. “博观而约取,厚积而薄发!”谨以此言,望诸君共勉 本文将前两个小实验整理拼凑再了一起 :分别是“年龄计算”.“斐波那契数列”.具体的项目介绍见下文. 1.年龄计算 有 5 个人

  • 如何使用Python实现斐波那契数列

    斐波那契数列(Fibonacci)最早由印度数学家Gopala提出,而第一个真正研究斐波那契数列的是意大利数学家 Leonardo Fibonacci,斐波那契数列的定义很简单,用数学函数可表示为: 数列从0和1开始,之后的数由前两个数相加而得出,例如斐波那契数列的前10个数是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34. 用 Python 实现斐波那契数列常见的写法有三种,各算法的执行效率也有很大差别,在面试中也会偶尔会被问到,通常面试的时候不是让你简单的用递归写写就完了,

  • C++输出斐波那契数列的两种实现方法

    定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三项开始,每一项都等于前两项之和. 以输出斐波那契数列的前20项为例: 方法一:比较标准的做法,是借助第三个变量实现的. 复制代码 代码如下: #include<iostream>  using namespace std;int main(){    int f1=0,f2=1,t,n=1;    cout<<"数列第1个

  • 斐波那契数列 优化矩阵求法实例

    在做编程题目的时候经常会遇到"斐波那契数列"相关的题目,尤其在做OJ中.下面说一些方法: (一)递归 递归是最慢的会发生重复计算,时间复杂度成指数级. 复制代码 代码如下: long long fac(int n){ if(n==1) return 1; else if(n==2)  return 2; else   return fac(n-1)+fac(n-2);} (二)循环 利用临时变量来保存中间的计算过程,加快运算. 复制代码 代码如下: long long fac(int

随机推荐