当前位置: 首页 > 后端技术 > Python

斐波那契数列的四个感悟

时间:2023-03-26 02:05:32 Python

孔乙己自己也知道不能和他们聊,只好找实习生聊。曾经对我说,“你写过代码吗?”我微微点头。他说:“代码我写好了,……我考你,斐波那契数列的输出如何实现?”我心想,同为乞丐的人,有资格考我吗?然后转过脸去不理会。孔乙己等了半天,语重心长地说:“你不会写吗?……我教你,记住!这些密码要背下来,以后当了领导,要用得上。”在开发项目中。”我心想,我和leader的水平还差得很远,我们的Leader从来没有在项目中写过Fibonacci;好笑又不耐烦,他懒洋洋地回道:“谁要你教,不是递归吗?”孔乙己显得很高兴,他用两个手指的长指甲在键盘上敲了敲,点点头说:“对对对!……斐波那契数列有四种写法,你知道吗?”我越发不耐烦了,撅着嘴走远了。孔乙己刚刚在命令行打开了Vim,想在里面写代码。见我不热情,他又叹了口气,露出十分遗憾的神色。(改编自鲁迅《孔乙己》)在家闲着也是闲着,不如看看如何写一个输出斐波那契数列的代码。首先,什么是斐波那契数列?斐波那契数列又称黄金分割数列,是数学家列奥纳多·斐波那契以养兔为例介绍的,故又称“兔子数列”。就是这样一个数列:1,1,2,3,5,8,13,21,34...在数学上,斐波那契数列递归定义如下:F(1)=1F(2)=1F(n)=F(n-1)+F(n-2)(n≥3,n∈N*)简单来说:序列中某一项的值等于它的前一项加上前一项的和学期。在现代物理学、准晶体结构、化学等领域,斐波那契数列都有直接的应用。为此,美国数学会从1963年开始出版了名为《斐波纳契数列季刊》的数学期刊,专门发表这项研究的成果。(摘自百度百科)我曾经把斐波那契写成面试题之一。1.递归编程教程中提到的斐波那契数列通常用来解释递归函数。当一个关于N的问题可以转化为同样的关于N-k的问题时,可以尝试用递归的思维来解决。deffib_1(n):如果n<=1:return1returnfib_1(n-1)+fib_1(n-2)foriinrange(20):print(fib_1(i),end='')2.循环但斐波那契不必递归实现。其实所有的递归都可以用循环来实现。deffib_2(n):a,b=0,1foriinrange(n):print(b,end='')a,b=b,a+bfib_2(20)3。Generators使用generators本质上和上面的循环是一样的,只是使用了yield来实现。deffib_3(n):a,b=0,1whilen>0:yieldba,b=b,a+bn-=1foriinfib_3(20):print(i,end='')4.矩阵乘法该方法的原理是利用二阶矩阵的乘法:importnumpyasnpdeffib_4(n):foriinrange(n):res=pow(np.matrix([[1,1],[1,0]],dtype='int64'),i)*np.matrix([[1],[0]])print(int(res[0][0]),end='')fib_4(20)以上四种方法的输出结果为:11235813213455891442333776109871597258441816765斐波那契数列的实现方法不限于这4种方法。如果您有其他实现方式,请在留言中添加。------一起学习,走得更远!欢迎搜索:Crossin的编程课堂