• 面试题七 斐波那契数列


    题目

      写一个函数,输入 n,求斐波那契数列的第 n 项。斐波那契数列的定义如下:

      

    分析

      由数列公式可知用递归法是很容易进行求解的,但递归求解的效率会很低,因此需要考虑使用循环求解。

      一般来说,能够用递归实现的程序也可以用循环实现,但较之循环法,递归程序虽然设计上更容易,但效率却受到很大影响

    代码实现一:递归法

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int fb(int n) {
     6     if (n <= 0) {
     7         return 0;
     8     }
     9     else if (n == 1) {
    10         return 1;
    11     }
    12     else
    13         return fb(n-1)+fb(n-2);
    14 }
    15 
    16 int main()
    17 {
    18     int n;
    19     cout << "请输入要求解的项 n :" << endl;
    20     cin >> n;
    21 
    22     int result = fb(n);
    23 
    24     cout << "第 " << n << " 项为: " << result << endl;
    25 
    26     return 0;
    27 }

    代码实现二:循环法

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int fb(int n) {
     6     int f0 = 0;
     7     int f1 = 1;
     8 
     9     int f;
    10     for (int i=2; i<=n; i++) {
    11         f = f0+f1;
    12         f0 = f1;
    13         f1 = f;
    14     }
    15 
    16     return f;
    17 }
    18 
    19 int main()
    20 {
    21     int n;
    22     cout << "请输入要求解的项 n :" << endl;
    23     cin >> n;
    24 
    25     int result = fb(n);
    26 
    27     cout << "第 " << n << " 项为: " << result << endl;
    28 
    29     return 0;
    30 }

    运行测试

      

    小结

      尽管递归的效率不高,但面试时,若没有特别说明,递归仍应该作为首选

      

  • 相关阅读:
    Xshell连接阿里云Centos6.8
    vsftpd文件服务器安装与配置
    JDK安装(linux系统)
    网站架构
    linux软件源配置
    java 调用静态方法和构造函数和静态块执行的先后顺序
    Mybatis的WHERE和IF动态
    MAVEN项目(仓库中没有jar包)
    Shiro
    MVC系列学习(六)-Razor语法
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3656063.html
Copyright © 2020-2023  润新知