定义
斐波那契数列(Fibonacci sequence),又称黄金分割数列、
因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子
(假定每对大兔每月能生产一对小兔,而每对小兔生长两个月就成为大兔,一年后可以繁殖成多少对兔子?)
而引入,故又称为“兔子数列”。
指的是这样一个数列:1、2、3、5、8、13、21、34、……
在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=2, F(n)=F(n-1)+F(n-2)(n>2,n∈N*)
在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,
为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,
用于专门刊载这方面的研究成果。
python代码
废话不说,直接上代码
# -*- coding: utf-8 -*-
def fib(max):
# 默认input是str类型
max = int(max)
n,a,b = 1,0,1
# max:求几个斐波那契数
while(n <= max):
print(b)
# 这一步很关键 f(n) = f(n-1) + f(n-2)
# 1 1 2 3 5 8
t = (b,a+b)
a = t[0]
b = t[1]
n += 1
return 'done'
print('求斐波那契前N个数?请输入N:')
max = input()
fib(max)
赋值语句简化
其中
t = (b,a+b)
a = t[0]
b = t[1]
可以简化为:
a,b = b,a+b
改进后的完整代码为:
# -*- coding: utf-8 -*-
def fib(max):
# 默认input是str类型
max = int(max)
n,a,b = 1,0,1
# max:求几个斐波那契数
while(n <= max):
print(b)
# 这一步很关键 f(n) = f(n-1) + f(n-2)
# 1 1 2 3 5 8
a,b = b,a+b
n += 1
return 'done'
print('求斐波那契前N个数?请输入N:')
max = input()
fib(max)
使用生成器进行改造
上面的函数和generator仅一步之遥。要把fib
函数变成generator
,只需要把print(b)
改为yield b
就可以了
# -*- coding: utf-8 -*-
def fib(max):
# 默认input是str类型
max = int(max)
n,a,b = 1,0,1
# max:求几个斐波那契数
while(n <= max):
yield b
# 这一步很关键 f(n) = f(n-1) + f(n-2)
# 1 1 2 3 5 8
a,b = b,a+b
n += 1
return 'done'
print('求斐波那契前N个数?请输入N:')
max = input()
g = fib(max)
print('使用python生成器获取斐波那契前%s个数:' %max)
for n in g:
print(n)