Python生成器实现斐波那契数列

            比如,斐波那契数列:1,1,2,3,5,8,13,21,34....
            用列表生成式写不出来,但是我们可以用函数把它打印出来:
            def fib(number):
                n, a, b = 0, 0, 1
                while n < number:
                    print(b)
                    a, b = b, a + b
                    n = n + 1
                return ‘OK!‘
            print(fib(5))
            结果:
                1
                1
                2
                3
                5
                OK!
            我们可以看出从第一个元素开始,推算出后续任意的元素。很像generator。
            要把fib函数变成generator,只需要把 print(b)改为 yield b就可以了:
            def fib(number):
                n, a, b = 0, 0, 1
                while n < number:
                    yield b
                    a, b = b, a + b
                    n = n + 1
                return ‘OK!‘

            print(fib(5))#<generator object fib at 0x105606ca8>
            注意:
                这里难理解的就是generator和函数的执行流程是不一样的。
                函数是顺序执行,遇到return语句或者最后一行函数语句就
                返回。
                注意:函数创建一次生成一个生成器,所以我们会将创建的生
                    成器赋值给一个变量。如果直接用函数本身这个生成器,
                    我们没用一次生成一个新的生成器对象,所以,我们一
                    般都将创建的生成器赋给一个变量。
                generetor的函数,在每次调用 next()的时候执行,遇到
                yield语句返回,再次执行时从上次返回的yield语句处继续
                执行。

原文地址:https://www.cnblogs.com/xiao-xue-di/p/9399314.html

时间: 2024-10-09 08:37:50

Python生成器实现斐波那契数列的相关文章

两个关于数列的Python脚本(斐波那契数列和猴子吃香蕉类问题)

斐波那契数列(Fibonacci sequence),因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列",又因其相邻两项的比无限接近黄金分割比例,所以又称为黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.34.--,即后一项是前两项的和. #!/usr/bin/python #coding:utf-8 #斐波那契数列 x=[0,1] for i in range(int(raw_input('请输入数

python代码实现斐波那契数列数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 用生成器实现斐波那契数列代码: def fibonacci(n): first = 0 se

Python与Go斐波那契数列

#!/usr/bin/env python # -*- coding: utf-8 -*- # 斐波那契数列 def fibonacci_sequence(num): aa = 0 b = 1 li = list() li.append(aa) li.append(b) for i in range(1, num): aa, b = b, a + b li.append(b) return li if __name__ == '__main__': a = fibonacci_sequence(

生成器实现斐波那契数列

#生成器生成斐波那契数列 def Fibnacc(num): 2 a= 1 3 b = 1 4 current_index = 0 5 while current_index<num: 6 data = a 7 8 current_index+=1 9 a,b=b,a+b 10 yield data 11 # yield:1.充当返回值的作用2.保存程序的运行状态,并且暂停程序执行3.当next的时候,可以继续换行程序从yield位置继续向下 12 # 执行 13 14 if __name__

如何使用Python输出一个[斐波那契数列]

如何使用Python输出一个[斐波那契数列]Fibonacci 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列". 例子:1.1.2.3.5.8.13.21.34.-- 解法1: 100以内的斐波那契数列 x=1 y=1 print(x,end=" ") print(y,end=" ") while(True)

Python递归及斐波那契数列

递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出:fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理.于是,fact(n)用递归的方式写出来就是: def fact(

LintCode Python 入门级题目 斐波纳契数列

原题描述: 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ... 题目分析: 开始的想法,通过递归实现输出fib(n-1)+fib(n-2)的值计算,原理正确,算法复杂度高,导致运行时间超过lintcode限制: class Solution: # @param n: an integer # @retur

Python递归函数与斐波那契数列

定义:在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 阶乘实例 1 n = int(input(">>:")) 2 3 4 def f(n): 5 s = 1 6 for i in range(2, (n + 1)): 7 s *= i 8 return s 9 print(f(n)) 递归 1 def factorial_new(n): 2 3 if n==1: 4 return 1 5 return n*factorial_new(

python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)

斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波那契数列元素 调用上述函数,完成如下功能: 用户输入一个整数n,输出所有不超过n的斐波那契数列元素.输出数列的元素和及平均数,输出按照顺序,用英文逗号和空格分割 此题目为自动评阅,请严格按照要求规范输入和输出. def jebona(n): if n==0: return 0 elif n == 1