Python如何实现斐波那契数列?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python如何实现斐波那契数列?

答:斐波那契数列,又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用 。今天让我们来看看Python代码有几种方式实现斐波那契数列?

下面分别来说说几种实现的方式:

1、递归方式


def fun1(n):
  assert n >= 0, "n > 0"
  if n <= 1:
    return n
  return fun1(n-1) + fun1(n-2)

for i in range(1, 20):
    print(fun1(i), end=' ')

结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

2、递增方式


def fun2(n):
  a, b = 0, 1
  for i in range(n + 1):
    a, b = b, a + b
  return a

for i in range(20):
  print(fun2(i), end=' ')

结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

3、生成器方式


def fib_loop_while(max):
  a, b = 0, 1
  while max > 0:
    a, b = b, a + b
    max -= 1
    yield a
for i in fib_loop_while(20):
  print(i, end=' ')
结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

4、矩阵方式


import numpy
def fib_matrix(n):
    res = pow((numpy.matrix([[1, 1], [1, 0]])), n) * numpy.matrix([[1], [0]])
    return res[0][0]
for i in range(20):
    print(int(fib_matrix(i)), end=' ')

还有没有其他的方式呢?大家留言区留言。

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-25、Python面试1-25题汇总

26、说说Python中的类型转换有哪些?

27、Python中实现二分查找的2种方法?

28、说说Python中的lambda表达式?

29、说说Python中的反射是什么?

30、Python删除list重复元素有几种方法?

31、Python中__new__和__init__的区别?

32、说说Python中的help()和dir()函数?

33、说说Python中的GIL是什么?

34、说说提高Python运行效率的技巧?

35、说说对于Python装饰器的理解?

36、说说Python中的异常捕获?

37、Python的单例模式有几种实现方式?

38、Python中的魔法方法有哪些?
39、Python实现自省的方法有哪些?
40、Python中 *args和**kwargs 的含义?
41、说说Python中的正则表达式?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • Python|递归函数之斐波那契数列

    上一期小编主要针对def函数的运用进行了简单的讲解,本期将会深入探讨def函数的另一种特别有用的函数(递归函数),其定义:如果一个函数在内部调自身,这个函数就是递归函数,递归函数的优点在于其定义简单, ...

  • 斐波那契数列的四种实现

    孔乙己自己知道不能和他们谈天,便只好向 Intern 说话.有一回对我说道,"你写过代码么?"我略略点一点头.他说,"写过代码,--我便考你一考.斐波那契数列的输出,怎样 ...

  • 斐波那契折返

    斐波那契数列(Fibonacci numbers)是由13世纪的数学家列昂纳多·斐波那契(Leonardo Fibonacci)发现的一个数列.它是从2开始,依次将其与数列中前一个数相加得到.即2+1 ...

  • 学 Python 怎能不知 yield ?

    简说Python 1周前 以下文章来源于无量测试之道 ,作者无量测试之道  简说Python推荐  来源|无量测试之道 作者|无量测试之道 引言 你可能听说过,带有 yield 的函数在 Python ...

  • Python|动态规划问题--斐波那契数列

    斐波那契数列斐波那契数列其表达式如下: 递归算法通过公式我们不难看出,其第一项和第二项为1,当x>=3时,斐波那契数列的第x项就等于其前两项的和.所以我们可以得出代码如下:public stat ...

  • 波浪理论:5、斐波那契数列与波浪变盘周期关系

    一.斐波那契数列 斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,55,89,144--这个数列从第三项开始,每一项都等于前两项之和. 很有趣的是:这样一个完全是自然数的 ...

  • 【通达信福利指标】斐波那契数列-副图选股指标公式

    【通达信福利指标】斐波那契数列-副图选股指标公式

  • 高中数学数列中的——斐波那契数列问题总结...

    高中数学数列中的--斐波那契数列问题总结(俗称兔子数列) (一)以斐波那契数列的概念 (二)以斐波那契数列的性质 (三)以斐波那契数列的模型 (四)以斐波那契数列的模型

  • 动态八卦中隐藏着神奇的斐波那契数列 是揭示宇宙变化的基本定律

    古人通过仰观俯察,近取诸身远取诸物,发明八卦,目的是模拟宇宙自然的变化规律,归纳解释万事万物现象.易是变化,周易就是研究变化的学问. 一分为二,阴阳变化是传统八卦理论的根本.所以说:易有太极,是生两仪 ...

  • 斐波那契数列与空中加油

    所谓空中加油形态,就是一只股票遭遇主力扫货,出现了连续跳空涨停之后,主力为了清洗浮筹,采取了凶狠洗盘动作,洗盘之后股票继续飞涨. 空中加油买入信号: 1.经过拉升后,进入良性"空中加油&qu ...

  • 技术分析最高境界:斐波纳契数列时间周期

    首先,来认识一下斐波纳契数列: 1-1-2-3-5-8-13-21-34-55-89-144-233-377- 宇宙运行规律 这个数列举世闻名,暗藏着宇宙运行的规律,甚至小到我们的细胞分裂.心理活动都 ...

  • 用数学来观察万物关联的法则,奇妙的斐波那契数列与螺旋线

    孩子们在探索世界的时候,从来不羞于一口气把关于风.水.云.山的问题问个遍.他们还很"无知",提出的问题比较笼统.慢慢地,他们开始体悟到生命的规律,尽管不了解其中的逻辑与原因,但还是 ...