菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 基础教程
(追記) (追記ここまで)

Python 练习实例6

Python 100例 Python 100例

题目:斐波那契数列。

程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、......。

在数学上,费波那契数列是以递归的方法来定义:

F0 = 0 (n=0)
F1 = 1 (n=1)
Fn = F[n-1]+ F[n-2](n=>2)

程序源代码:

方法一

#!/usr/bin/python# -*- coding: UTF-8 -*-deffib(n): a,b = 1,1foriinrange(n-1): a,b = b,a+breturna# 输出了第10个斐波那契数列print(fib(10))

方法二

#!/usr/bin/python# -*- coding: UTF-8 -*-# 使用递归deffib(n): ifn==1orn==2: return1returnfib(n-1)+fib(n-2)# 输出了第10个斐波那契数列print(fib(10))

以上实例输出了第10个斐波那契数列,结果为:

55

方法三

如果你需要输出指定个数的斐波那契数列,可以使用以下代码:

#!/usr/bin/python# -*- coding: UTF-8 -*-deffib(n): ifn == 1: return[1]ifn == 2: return[1, 1]fibs = [1, 1]foriinrange(2, n): fibs.append(fibs[-1] + fibs[-2])returnfibs# 输出前 10 个斐波那契数列print(fib(10))

以上程序运行输出结果为:

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

Python 100例 Python 100例

AI 思考中...

9 篇笔记 写笔记

  1. #0

    流年细雨

    758***[email protected]

    13

    使用数学的通项公式:

    #!/usr/bin/env python
    #coding:utf-8
    # 输出第n个数
    n = int(raw_input("第几个数: "))
    # 斐波那契数列的通项公式
    f =(1/(5**0.5))*(((1+(5**0.5))/2)**n - ((1-(5**0.5))/2)**n)
    print "第%d个数:"%n,int(f)
    # 输出前n个数列:
    l=[1]
    for i in range(1,n+1):
     f=(1/(5**0.5))*(((1+(5**0.5))/2)**i - ((1-(5**0.5))/2)**i)
     l.append(int(f))
    

    流年细雨

    758***[email protected]

    9年前 (2017年04月14日)
  2. #0

    等一个人

    252***[email protected]

    32

    参考方案:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    def Fib(n):
     a, b = 0, 1
     while n:
     a, b, n = b, a + b, n - 1
     print(a)
    Fib(7)
    

    等一个人

    252***[email protected]

    9年前 (2017年04月25日)
  3. #0

    dawn

    yin***163.com

    6

    参考方案:

    #!/usr/bin/env python
    #coding:utf-8
    #斐波拉契数列---使用生成器
    def fib(max):
     n,a,b = 0,0,1
     while n < max:
     yield b
     a,b = b,a+b
     n += 1
    max = int(input('input max num :'))
    for n in fib(max):
     print(n)

    dawn

    yin***163.com

    9年前 (2017年05月05日)
  4. #0

    lqy126

    412***[email protected]

    11
    #!/usr/bin/env python
    #coding:utf-8
    list = []
    a = 1
    list.append(a) # 第一个
    b = 1
    list.append(b) # 第二个
    for i in range(1,20): # 再输出接下来的 19 个
     c = list[i-1]+list[i]
     list.append(c)
    print list # 输出 21 个
    

    lqy126

    412***[email protected]

    9年前 (2017年05月05日)
  5. #0

    Chyroc

    che***[email protected]

    3

    这种函数应该使用修饰器加上缓存

    #!/usr/bin/python3
    from functools import lru_cache
    @lru_cache(None)
    def f(n):
     assert n >= 0
     return n if n <= 1 else f(n - 1) + f(n - 2)
    print(f(10))

    Chyroc

    che***[email protected]

    9年前 (2017年05月31日)
  6. #0

    makeWorks

    mak***[email protected]

    6

    Python3 下参考方法:

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    class Fibs:
     def __init__(self, n = 10):
     self.a = 0
     self.b = 1
     self.n = n
     self.i = 0
     def __iter__(self):
     return self
     def __next__(self):
     self.a, self.b = self.b, self.a+self.b
     self.i += 1
     if self.i > self.n:
     raise StopIteration
     return self.a
    fibs=Fibs(10)
    for i in fibs:
     print (i)
    

    makeWorks

    mak***[email protected]

    9年前 (2017年08月23日)
  7. #0

    abc

    abc***c.com

    3

    参考方法:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    l=[0,1]
    for i in range(10):
     l.append(reduce (lambda x,y:x+y,l[-1:-3:-1]))
    print l
    

    abc

    abc***c.com

    9年前 (2017年08月28日)
  8. #0

    boy

    963***[email protected]

    3

    参考方法:

    # -*- coding: UTF-8 -*-
    fe_list = [0, 1]
    for i in range(1,11):
     fe_list.append(sum(fe_list[(i-1):(i+1)]))
    print fe_list

    boy

    963***[email protected]

    9年前 (2017年10月19日)
  9. #0

    mayi

    law***[email protected]

    5

    使用列表推导式:

    n = int(input("> "))
    f = [0, 1]
    print([f[i] for i in range(2, n + 1) if not f.append(f[i - 1] + f[i - 2])][-1])

    mayi

    law***[email protected]

    8年前 (2018年12月22日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /