斐波那契数列的思维方式

    斐波那契数列是算法中的经典,也是很多互联网企业笔试面试的热点。当然,现在很多企业不会将原本的“动物繁殖”问题照搬过来考了,很多都是这个题目的变种。让我们看一下斐波那契数列的题目描述和解答方式:

    有一只动物,出生两天之后,就开始每天繁殖一只,问第20天的时候,这只动物会有多少只?假设我们第一天只有一只,那么第二天因为它只出生了一天,所以不能繁殖。第三天的时候,最初的那只和它生出来的一只,一共有三只动物,以此类推。

    这是一个典型的递归题目,如果使用画图,或者自己去每天去推的话,肯定是一件耗时耗力的工作,并且很有可能会算错。

    这个时候,我们的思维方式应该是这样子的,请仔细体会:

    今天是第五天,动物数量等于 第四天的动物数量 + 第三天的动物数量
                  /*第三天的动物生下了同样数量的动物加入到第五天的数量中*/

    同理:
    第三天的动物数量    等于 第二天动物数量  + 第一天动物数量(新)
    第四天的动物数量    等于 第三天动物数量  + 第二天动物数量(新)
    第20天的动物数量    等于 第19天动物数量  + 第18天动物数量(新)

    我们就很容易得到一个递归的规律,f(n)=f(n-1)+f(n-2),并且有一个跳出递归的条件,就是n>20。随便找一种语言实现上面的递归就可以了,如下是C++的代码实现:

#define num 20
#include <iostream>
using namespace std;

void main(){
	float a[num]={1,1};
	for(int i=2;i<num;i++){
		a[i]=a[i-1]+a[i-2];
	}
	for(int i=0;i<num;i++){
		cout<<i<<" 个单位日期后,动物的数量:"<<a[i]<<endl;
	}
}

作者 陈字文(热衷于PM\ORACLE\JAVA等,欢迎同行交流)EMAIL:ziwen@163.com  QQ:409020100

执行结果如下:



我们应该重点关注的是,如何思考这个题目,因为在实际的面试过程中,出现了斐波那契额数的变种题目,在某500强软件企业的测试中,要求小于一分钟能够做出一道类似的题目,这个必须是一个相当优秀程序员的思维。勤加练习,必有所获!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值