兔子数列(求第n个数的值)

# 求斐波那契数列(兔子数列)第n个数字的值

假设第1个月有1对刚诞生的兔子,第2个月进入成熟期,第3个月开始生育兔子,而1对成熟的兔子每月会生1对兔子,兔子永不死去……那么,由1对初生兔子开始,12个月后会有多少对兔子呢?
这个问题涉及到的知识就是斐波那契数列,它的发明者是意大利数学家列昂纳多•斐波那契,那么该如何使用C语言求斐波那契数列第n个数的值呢?

一,分析斐波那契数列

我们先来看一组斐波那契数列:
1、1、2、3、5、8、13、21、34……
我们从中寻找规律,可以发现从第三个数开始,每个数都等于之前两个数字的和,
斐波那契数列也被称为兔子数列,我们来看一下一张图片:
在这里插入图片描述
从图中我们可以清楚的看到兔子繁育的整个流程,当我们假设兔子不会死亡,那么上面这张图每个月兔子数量的值按顺序组成的数列就是一个斐波那契数列,也就是兔子数列。

二,程序设计

通过上面的分析我们就可以得到斐波那契数列的通项公式为:其的通项公式为:
F[n]=F[n-1]+F[n-2] (n>=3,F[1]=1,F[2]=1 )
那么其第n个值的求法就是
当0<n<=2,n为整数时,F[n]=1;为定值。
当n>=3,n为整数时,F[n]=F[n-1]+F[n-2];为前两个数的和。
那么我们在设计程序时就先需要判断一下所求第n个数是否是小于3的整数。
下面我们分别使用非递归和递归两种方式来编写程序:

1,非递归

根据上面的分析我们可以知道,斐波那契数列前两个数为1,从第三个数开始就为前两个数的和,那么我们在进行求值的时就先判断是否为前两个数,若为前两个数则直接输出1;
在这里插入图片描述
若不为前两个数,那我们首先定义两个值为1的变量num1和num2,表示斐波那契数列最初的两个值,在定义一个变量sum表示第三个数,其等于前两个数的和,然后当我们求出第三个数后再求第四个数,注意第四个数为第二个数和第三个数的和,而这时第三个数为sum,第二个数应该为num2,我们要求第四个数,只需将求出的第三个数sum的值赋给num2,将num2的值赋给num1,那第四个数就仍然为为num1和num2的和。,而要求后面的数,我们只需不断重复这个过程就行了,我们可以使用for循环来实现这个步骤,而每重复一次,就能求得下一个数的值,又因为我们是从第三个数开始求值,那么循环的次数便是我们所求第n个数减去2,也就是n-2次。
在这里插入图片描述

我们运行一下程序看下结果:
在这里插入图片描述
可以看到,我们成功实现用非递归的方法求斐波那契数列第n个数的值。

2,递归

在完成用非递归的方法求斐波那契数列的值后,我们再来分析一下该如何用递归的方法求斐波那契数列第n个数的值。
同样的,我们先来看一组斐波那契数列:
1、1、2、3、5、8、13、21、34……
假设我们要求的为第6个数,也就是8,其为第四个数3和第五个数5的和,而3又为第三个数2和第二个数1的和,5为第四个数3和第三个数2的和,以此类推,最终都会回到第一个数和第二个数,用树状图来表示如下:
在这里插入图片描述
分析完后,我们来编写程序,要使用递归就需要函数,我们命名一个fib函数来实现这个步骤。
在这里插入图片描述
我们运行一下看下效果:
在这里插入图片描述
可以看到,成功求出了第三到第七个斐波那契数。

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值