您的位置:首页 > 职场人生

面试题之斐波那契数列

2017-11-01 09:31 155 查看
简介:

      斐波那契数列是意大利著名的数学家,他最重要的研究成果是在不定分析和数学论方面,他的斐波那契数列成为世人热衷研究的问题。

*:面试此题的几率也很大。

特点:

    a1,a2已知

     a(n)=a(n-1)+a(n-2) n>=3

应用:

      兔子繁殖问题,树枝问题,上楼方式问题,蜂房问题,声音问题,花瓣问题。。。。。

详解:

       楼梯上有n阶台阶,上楼时可以一步上一阶,也可以上2阶,编写算法计算到第二阶共有多少种不同的上楼梯方式。

        数学模型:从问题按照习惯,从前向后思考,也就是从第一阶开始,考虑怎么到第二阶,第三阶....则很难找出问题

的规律;而反过来先思考“到n阶有几种情况”,答案就简单了,只有两种情况。

        从第n-1 阶到第n阶

        从第n-2阶到第n阶

    int feibonaqie(int n)
{
if (0== n || 1== n)
{
return n;
}
return feibonaqie(n - 1) + feibonaqie(n-2);

}     但仅仅就这样吗?不,当n>=100时,在运行程序时,电脑会一段时间没反应,原因是上面程序的函数占用了大量
CPU的资源。所以我们提出了优化方案:

     将递归转换为循环,当n很大时,可以大大提高效率。

#include<iostream>
#include<stdlib.h>
using namespace std;

int feibonaqie2(int n)
{
if (0== n || 1 == n)
{
return n;
}
else
{
int pre = 1, post = 1;
// 1 2
int fn = 0; //等于其前面两个元素值得和
for (int i = 3; i <= n; i++)
{
fn = pre + post;
pre = post;
post = fn;
}

return fn;
}

}

int main()
{
int f = feibonaqie2(3);
cout << f << endl;
return 0;
}       

        还有其他方法下次总结,不足之处,多多指教。

    
    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: