zoukankan      html  css  js  c++  java
  • 剑指offer第二版-10.斐波那契数列

    面试题10:斐波那契数列

    题目要求:
    求斐波那契数列的第n项的值。f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) n>1

    思路:使用循环从下往上计算数列。

    考点:考察对递归和循环的选择。使用递归的代码通常比循环简洁,但使用递归时要注意一下几点:1、函数调用的时间和空间消耗;2、递归中的重复计算;3、最严重的栈溢出。根据斐波那契数列递归形式定义很容易直接将代码写成递归,而这种方式有大量重复计算,效率很低。

    解法比较:
    解法3,4将问题数学化,借助数学工具的推导,从根本上减低时间复杂度。

    /**
     * Copyright(C) 2019 Hangzhou Differsoft Co., Ltd. All rights reserved.
     *
     */
    package com.java.offer;
    
    /**
     * @since 2019年2月26日 下午12:59:43
     * @author xuchao
     *
     * 斐波那契数列 f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2) n>1
     */
    public class P10_Fibonacci {
        // 1.依据原始概念的递归解法,时间复杂度o(n^2)
        public static int fibonacci1(int n) {
            if(n<=1) {
                return n;
            }
            return fibonacci1(n - 1) + fibonacci1(n - 2);
        }
    
        // 2.当前状态只与前两个状态有关。存储前两个值,计算后一个,迭代进行。时间复杂度o(n)
        public static int fibonacci2(int n) {
            if (n <= 1) {
                return n;
            }
            int f1 = 0;
            int f2 = 1;
            for (int i = 2; i <= n; i++) {
                int t = f1 + f2;
                f1 = f2;
                f2 = t;
            }
            return f2;
        }
    
        public static void main(String[] args) {
            System.out.println(fibonacci1(13));
            System.out.println(fibonacci1(13));
        }
    }
  • 相关阅读:
    java 找不到或无法加载主类
    navicat connect error: Authentication plugin 'caching_sha2_password' cannot be loaded
    mysql command
    the diffirent between step into and step over (java)
    20181015
    Eclipse
    游戏2048源代码
    vue的生命周期
    简单快速了解Vue.js的开发流程
    C# 连接西门子PLC
  • 原文地址:https://www.cnblogs.com/chao-zjj/p/10436709.html
Copyright © 2011-2022 走看看