面试题之斐波那契数列

来源:互联网 发布:芒果tv mac版 编辑:程序博客网 时间:2024/06/06 16:26

简介:

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

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

特点:

    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         2int 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;}
       
        还有其他方法下次总结,不足之处,多多指教。