zoukankan      html  css  js  c++  java
  • 【剑指offer】9、斐波拉契数列

    面试题9、斐波拉契数列

    题目:

    输入整数n,求斐波拉契数列第n个数。

    思路:

    一、递归式算法:

    利用f(n) = f(n-1) + f(n-2)的特性来进行递归,代码如下:

    代码:

    long long Fib(unsigned int n)
    {
        if(n<=0)
            return 0;
        if(n==1)
            return 1;
        return Fib(n-1) + Fib(n-2);
    }
    

    缺陷:

    当n比较大时递归非常慢,因为递归过程中存在很多重复计算。

    二、改进思路:

    应该采用非递归算法,保存之前的计算结果,用空间换时间。

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    
    int main()
    {
        int n;
        scanf("%d", &n);
        int num1 = 0;
        int num2 = 1;
        for(int i=2;i<n;i++)
        {
            int tmp = num1 + num2;
            num1 = num2;
            num2 = tmp;
        }
        printf("%d", num2);
    }
    

    相似题目:

    1、青蛙跳台阶,一次可以跳1或者2格,共n阶台阶,问有多少种上台阶的方法?

    思路:从后往前想,f(n) = f(n-1) + f(n-2),转换成同样的题目了。

    2、矩形覆盖问题,用21的矩形来覆盖28的矩形,小矩形可以横着或竖着来覆盖,问有多少种方法去覆盖?

    思路:横着覆盖就变成了f(8) = 1+f(8-2),竖着变成f(8) = 1 + f(8-1),所以f(8) = f(8-1) + f(8-2)。

  • 相关阅读:
    学号 20172328 《程序设计与数据结构》第八周学习总结
    172328 结对编程练习_四则运算 第一周 阶段总结
    学号 20172328 《程序设计与数据结构》实验二报告
    20172328《程序设计与数据结构》第七周学习总结
    Educoder
    Educoder
    Educoder
    Educoder
    Educoder
    Educoder
  • 原文地址:https://www.cnblogs.com/puyangsky/p/5826466.html
Copyright © 2011-2022 走看看