python2.7练习小例子(六)
6):题目:斐波那契数列。
程序分析:斐波那契数列(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 -*- def fib(n):
a,b = 1,1
for i in range(n-1):
a,b = b,a+b
return a # 输出了第10个斐波那契数列
print fib(10)
第二个方法为:
#!/usr/bin/python
# -*- coding: UTF-8 -*- # 使用递归
def fib(n):
if n==1 or n==2:
return 1
return fib(n-1)+fib(n-2) # 输出了第10个斐波那契数列
print fib(10)
以上实例输出了第10个斐波那契数列,结果为:
55
如果你需要输出指定个数的斐波那契数列,可以使用以下代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*- def fib(n):
if n == 1:
return [1]
if n == 2:
return [1, 1]
fibs = [1, 1]
for i in range(2, n):
fibs.append(fibs[-1] + fibs[-2])
return fibs # 输出前 10 个斐波那契数列
print fib(10)
以上程序运行输出结果为:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
使用数学的通项公式:
#!/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))
#!/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)
#!/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)
#!/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 个
使用修饰器加上缓存:
#!/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))
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)
#!/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
不得不说一句,例子的实现方式太多了,这些只是本人整理的一小部分,还有更多。。。
如果感觉不错的话,请多多点赞支持哦。。。
# -*- 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
原文链接:https://blog.csdn.net/luyaran/article/details/80017491
python2.7练习小例子(六)的更多相关文章
- python2.7练习小例子(十六)
16):题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 程序分析:利用 while 或 for 语句,条件为输入的字符不为 '\n'. 程序源代码: #!/u ...
- python2.7练习小例子(二十九)
29):1.题目:按相反的顺序输出列表的值. #!/usr/bin/python # -*- coding: UTF-8 -*- a = ['one', 'two', 'three'] for ...
- python2.7练习小例子(十二)
12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数" ...
- python2.7练习小例子(八)
8):题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列. 程序源代码: #!/usr/bin/python # -*- coding: ...
- python2.7练习小例子(七)
7):题目:将一个列表的数据复制到另一个列表中. 程序分析:使用列表[:]. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...
- python2.7练习小例子(二十七)
27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. #!/usr/bin/python # -*- coding: UTF-8 -* ...
- python2.7练习小例子(二十八)
28):题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...
- python2.7练习小例子(二十四)
24):1.题目:利用递归方法求5!. 程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...
- python2.7练习小例子(二十三)
23):题目:求1+2!+3!+...+20!的和. 程序分析:此程序只是把累加变成了累乘. #!/usr/bin/python # -*- coding: UTF-8 -*- n = ...
- python2.7练习小例子(十八)
19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. #!/usr/bin/python # -*- ...
随机推荐
- WAKE-SPM-综述
1,SPM 1,1source paper:http://lear.inrialpes.fr/pubs/2007/ZMLS07/ZhangMarszalekLazebnikSchmid-IJCV07- ...
- SQL server 2008 安装报错 reporting services catalog database file existence
SQL server 2008 安装时报错 提示 reporting services catalog database file existence 查了一下,是因为原来装过Sql server 2 ...
- 如何在ubuntu上安装virtualbox的driver module vboxdrv
干净的ubuntu安装完毕之后是没有vboxdrv这个driver module的. 新建一个folder jerry_virtualbox: 使用wget下载virtualbox安装包:https: ...
- CENTOS 6 通过YUM升级GCC到4.7/4.8
第一阶段:升级到4.7 [root@01314.CN ~]# cd /etc/yum.repos.d [root@01314.CN yum.repos.d]# wget http://people.c ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace【树状数组维护区间最大值】
任意门:https://nanti.jisuanke.com/t/31459 There's a beach in the first quadrant. And from time to time, ...
- 2018.11.10 Mac设置Eclipse的 .m2文件夹是否可见操作&&Mac系统显示当前文件夹的路径设置
第一行就是设置为可见的记得要重启Finder不然是没有效果的 第二行就是设置为不可见的 打开"终端"(应用程序->实用工具),输入以下两条命令: defaults write ...
- 轻量ORM-SqlRepoEx 重大升级
.Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,支持MySQL.SQL Server数据库方言,使用强类型操作数据的轻量级ORM工具,在减少魔法 ...
- java8新特性学习1
java8增加了不少新特性,下面就一些常见的新特性进行学习... 1.接口中的方法 2.函数式接口 3.Lambda表达式 4.java8内置的四大核心函数式接口 5.方法引用和构造器引用 6.Str ...
- Java秒杀系统方案优化 高性能高并发实战(已完成)
1:商品列表 2:商品详情判断是否可以开始秒杀,未开始不显示秒杀按钮显示倒计时,开始显示秒杀按钮,同时会显示验证码输入框以及验证码图片,当点击秒杀按钮的时候会首先判断验证码是否正确,如果正确会返回一个 ...
- Angularjs基础(六)
AngularJS HTML DOM AngularJS为HTML DOM 元素的属性提供了绑定应用数据的指令. ng-disabled指令 ng-disabled指令直接绑定应用数据到HTML的di ...