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)。

  • 相关阅读:
    HTML页面保存为图片
    一些chrome调试
    hooks使用的一些注意点
    React(v16.8) Hooks 简析
    基于 React.js 和 Node.js 的 SSR 实现方案
    移动端垂直居中对齐
    python XML ElementTree的增删改查
    python实现XML解析的三种方法
    git的用法
    Appium获取元素的方式
  • 原文地址:https://www.cnblogs.com/puyangsky/p/5826466.html
Copyright © 2011-2022 走看看