电商网站建设内容规划,北京人制作工具,网站建设 概念股,网站开发的技术风险黑马程序员微信号#xff1a;heiniu526传智播客旗下互联网资讯#xff0c;学习资源免费分享平台大家在面试过程中经常会考到斐波那契数列#xff0c;斐波那契数列(Fibonacci)最早由印度数学家Gopala提出#xff0c;而第一个真正研究斐波那契数列的是意大利数学家 Leonardo … 黑马程序员微信号heiniu526传智播客旗下互联网资讯学习资源免费分享平台大家在面试过程中经常会考到斐波那契数列斐波那契数列(Fibonacci)最早由印度数学家Gopala提出而第一个真正研究斐波那契数列的是意大利数学家 Leonardo Fibonacci斐波那契数列的定义很简单用数学函数可表示为数列从0和1开始之后的数由前两个数相加而得出例如斐波那契数列的前10个数是0, 1, 1, 2, 3, 5, 8, 13, 21, 34。用 Python 实现斐波那契数列常见的写法有三种各算法的执行效率也有很大差别在面试中也会偶尔会被问到通常面试的时候不是让你简单的用递归写写就完了还会问你时间复杂度怎样空间复杂度怎样有没有可改进的地方。递归法所谓递归就是指函数的定义中使用了函数自身的方法。递归是一种代码最简洁的方法但它是效率非常低因为会出现大量的重复计算时间复杂度是O(1.618 ^ n)1.618是黄金分割。同时受限于 Python 中递归的最大深度是1000所以用递归来求解并不是一种可取的办法。递推法递推法就是从0和1开始前两项相加逐个求出第3、第4个数直到求出第n个数的值。这种算法的时间复杂是O(n)呈线性增长如果数据量巨大速度越到后面会越慢。上面两种方式都是使用分而治之的思想就是把一个大的问题化小然后利用小问题的求解得到目标问题的答案。矩阵法线性代数》是大学计算机专业低年级的课程这门课教的就是矩阵那时候觉得这东西学起来很枯燥没什么用处工作后你才发现搞机器学习、数据分析、数据建模时大有用处书到用时方恨少。其实矩阵的本质就是线性方程式。斐波那契数列中两个相邻的项分别为F(n) 和 F(n - 1)如果把这两个数当作一个2行1列的矩阵可表示为因为 F(n) F(n-1)F(n-2)所以就有通过反推其实它是两个矩阵的乘积得来的依此类推最后可推出因此想要求出F(n)的值只要能求出右边矩阵的n-1次方的值最后求得两矩阵乘积取新矩阵的第一行的第一列的值即可比如n3时可以得知F(3)的值2F(2)的值为1因为幂运算可以使用二分加速所以矩阵法的时间复杂度为 O(log n)。我们可以用科学计算包 numpy 来实现矩阵法总结3种不同的算法效率对比从上面图可以看出递归法效率惊人的低矩阵法在数据量比较大的时候才突显出它的优势递推法随着数据的变大所花的时间也越来越大。干货不错就点下在看▼点击 加程序员交流群