经典面试问题 斐波那契数列

从小白到大神都会遇到的经典面试题 —— 斐波那契数列 文章目录斐波那契数列是什么斐波那契数列面试常问问法递归解法普通递归方法尾递归法迭代解法更快的解法(一):数学方法更快的解法(二):矩阵幂次方(大厂必备)参考文献 写在前面: 博主在春招找实习的过程中呢,百度的二面面试官就让我手撕了跳台阶问题。其本质上呢是斐波那契数列,当时给出了四种解法。但是呢,面试官还是不是很满意。博主苦思冥想也想不出最后一种,最后面试官教了我一种解法,遂连带着一起记录下来。 斐波那契数列是什么 以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分 阅读详情

斐波那契数列的定义是F[N] = F[N-1] + F[N-2]     F[0] =F[1] = 1

如果直接用递归的方法求解,画出递归树可得时间复杂度是O(2^n)

使用记忆话递归,即将已经计算出来的状态存下来,如果发现这个答案已经计算过,则不再递归下去,直接用答案,否则递归下去,时间复杂度是O(N)。

自底向上迭代,时间复杂度O(N)

还可以继续优化到O(logN)

优化的方法将矩阵写成矩阵形式,然后直接计算矩阵幂乘,矩阵幂乘可以用快速幂的方法优化成O(logN) 

下面假设下自底向上递归

假设一个整数是10, 快速求解10的75次方

1.75的二进制1001011

2.10的75次方 10^64*10^8*10^2*10^1

先计算10^1, 在根据10^1计算10^2, 由10^2计算10^4,  由10^4计算10^8

   double myPow(double x, int n) {
        long long N = n;
        if (N < 0) {
            x = 1 / x;
            N = -N;
        }
        double ans = 1;
        double current_product = x;
        for (long long i = N; i>0; i /= 2) {
            if ((i % 2) == 1) {
                ans = ans * current_product;
            }
            current_product = current_product * current_product;
        }
        return ans;
    }

注: 所谓的通项公式涉及到指数计算,严格来说不能算O(1)

 

斐波那契数列面试题解法(java) 斐波那契数列经常出现在程序员面试的题目中,本文总结一下斐波那契数列的解法 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)= 阅读详情

相关推荐

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

python03011的博客 3706

面试题10:斐波那契数列

题目1 该系列文章题目和思路均参考自:《剑指Offer》 解法 思路1(效率较低的思路):使用递归求解斐波那契数列是很常见的写法,但这种递归方式效率较低,因为在计算的过程中包含了很多重复元素的计算。例如计算n=10时的计算过程如下: 代码实现: public static long fibonacciRecursion(int n) { if (n == 0 ...

Blossom 832

转录组PCA分析3大常见误区:数据标准化、离群样本与批次效应处理

本文深入探讨转录组PCA分析中的三大常见误区:数据标准化、离群样本识别与批次效应处理。通过实战案例和R代码演示,揭示如何优化PCA结果以提升生物学解释力,特别关注数据标准化策略的选择和批次校正方法的应用,帮助研究者避免常见陷阱并获得可靠的转录组分析结果。

weixin_28362173的博客 349

剑指Offer面试题9(java版)斐波那契数列

题目一:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下: 1、效率很低效的解法,挑剔的面试官不会喜欢 很多C语言的教科书在讲述递归函数的时候,都户拿Fibonacci作为例子,因此很多的应聘者对这道题的递归解法都很熟悉。 下面是实现代码 我们教科书上反复用这个问题来讲解递归的函数,并不能说明递归的解法最适合这道题目。面试官会提示我们上述递归的解法有很严重

D.K专栏 3767

面试题精选:神奇的斐波那契数列

斐波那契数列,其最开始的几项是0、1、1、2、3、5、8、13、21、34…… ,后面的每一项是前两项之和,事实上,斐波那契在数学上有自己的严格递归定义。 f0 = 0 f1 = 1 f(n) = f(n-1) + f(n-2) 斐波那契数列其实有很多有趣的性质,比如你拿斐波那契里每项数为半径绘制1/4圆弧,你就会得到著名的黄金螺旋线。 上图只是绘制到了10多项,如果继续绘制,会变成下面这样。。 另外斐波那契数还有一个神奇的性质,f(n-1)/f(n)约等于黄金分割比例,n越大,其越接近黄金

xindoo 1687

牛客题解 | 跳台阶

牛客题库题解

wc529065的博客 664

algrothm_斐波那契数列(0,1,1,2,3,5)【循环】

AinUser的博客 702

面试算法精讲:FizzBuzz与斐波那契数列

本文深入探讨了面试中常见的算法问题,包括FizzBuzz问题及其优化,以及斐波那契数列的多种实现方式。通过分析不同算法的效率和代码的重用性,为读者提供了优化代码和提高算法效率的策略。

weixin_33597080的博客 477

Java基础算法——斐波那契数列的多种实现方式!

为什么突然想写这个,只因读了下边某位大佬的一段话! 如果你应聘的是“Web前端开发”岗位,那么你只懂jQuery也可以胜任,那么,“软件工程师”是不是就意味着会HTML、JavaScript和CSS这些必备技能就行了呢? 你真的会写代码吗? 对于应聘程序员的求职人员,我,作为用人单位,首先希望的是你会写代码。我指的是真正的代码:我给你一个问题,你使用任何你觉得舒适的编程语言给

救救孩子...... 1016

面试题 10:斐波那契数列

文章目录面试题 10:斐波那契数列题目一:求斐波那契数列的第n项题目描述递归非递归(迭代)题目二:跳台阶题目描述题目三:变态跳台阶题目描述状态枚举题目四:矩形覆盖题目描述 面试题 10:斐波那契数列 题目一:求斐波那契数列的第n项 题目描述 输入一个整数 n ,求斐波那契数列的第 n 项。 假定从 0 开始,第 0 项为 0。( n <= 39 ) 样例 输入整数 n=5 返回 5 ...

charlsonzhao的博客 377

算法经典面试题斐波那契数列&爬楼梯

算法经典面试题斐波那契数列&爬楼梯前言一、爬楼梯题目描述题解方法一:直接递归方法二:优化递归方法三:循环二、斐波那契数列题目描述题解方法一方法二总结 前言 题目来源于:剑指 Offer 10- I. 斐波那契数列和力扣70. 爬楼梯 一、爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 +

CltCj的博客 1173

leetcode-爬楼梯:相当于斐波那契数列

题目: **假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1...

benjue1936的博客 546

面试题10:斐波那契数列 + 面试题 9: 青蛙跳台阶

递归面试题10:斐波那契数列面试题 9: 青蛙跳台阶 面试题10:斐波那契数列 实现斐波那契数列 long long Fibonacci(unsigned n) { int result[2] = {0, 1}; if(n<2) return result[n]; long long first = 0; long long second = 1; long long fibN...

一只咸鱼的小努力 350

剑指offer刷题:跳台阶和斐波那契数列

文章目录 语法: CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型 BEGIN 函数体 END 注:1.参数列表包含两部分:参数名和参数类型 2.函数体:必须有return语句,否则会报错。 3.若函数体中仅有一条语句,则可以省略BEGIN END 4.使用delimiter语句设置结束标 ...

光脚小孩的博客 423

剑指offer(三) 斐波那契数列+跳台阶+变态跳台阶

记录并复习一下剑指offer的部分题型~ 文章目录斐波那契数列跳台阶变态跳台阶 斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n<=39 斐波那契数列是指一个:1,1,2,3,5,8,13,21,34…的数列,这个数列从第三个数开始等于前两个数之和。 题目中要求从0开始,第0项是0,第1项是1,那么我们可以通过递归来计算。 public class Solution { public int Fi

LinJy 428

【剑指Offer】面试题10. 斐波那契数列

题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1)= 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:100000...

胡图图 821

面试题10-斐波那契数列

题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。(n<=39) 斐波那契数列公式为: 解题思路 我们以求解f(10)为例类分析递归的求解过程。想求f(10),需要先求得f(9)和f(8)。同样,想求得f(9),需要先求的f(8)和f(7)…我们可以用树形结构来表示这种依赖关系,如下图所示: 我们不难发现在这棵树中有很多节点是重复的,而且重复的结点数会随着n的增加而急剧增加,这意味计算量会随着n的增加而急剧增大。事实上,递归方法计算的时间复杂度是以n的指数的方式递

weixin_42127177的博客 824

面试题斐波那契数列

简介:      斐波那契数列是意大利著名的数学家,他最重要的研究成果是在不定分析和数学论方面,他的斐波那契数列成为世人热衷研究的问题。 *:面试此题的几率也很大。 特点:     a1,a2已知     a(n)=a(n-1)+a(n-2) n>=3 应用:       兔子繁殖问题,树枝问题,上楼方式问题,蜂房问题,声音问题,花瓣问题。。。。。 详解:

Lawrence_121 854

16-ADC单通道连续转换.rar

16_ADC单通道连续转换.rarSTM32是一系列由ST Microelectronics(意法半导体公司)推出的微控制器(MCU)。这些微控制器基于ARM Cortex-M架构,并且提供各种不同的封装和引脚配置。STM32系列中一些受欢迎的微控制器包括STM32F103,STM32F407和STM32F429。 STM32微控制器以其低功耗,高性能和广泛的功能而闻名。它们通常用于物联网设备,可穿戴技术和其他需要低功耗和高性能的应用。 总体而言,STM32微控制器是许多开发人员的首选,因为它们的多功能性,可靠性和广泛的功能。————————————————版权声明:本文为CSDN博主「Print World」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/u010249597/article/details/134762381

上一篇: C++ 面试题多态与虚函数面试题
下一篇: 2014年腾讯校招笔试题详解
wwxy261
博客等级 码龄11年 1074粉丝 3690原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值