23递归和迭代 斐波那契额数列的迭代实现
1 2 3 4 5 6 7 8 9 10 11 12
1 1 2 3 5 8 13 21 34 55 89 144
这个函数是神的函数,我靠一个函数和神有什么关系搞笑把,黄金比例是0.618,而这个数列是以0.618为增量,黄金增量
这个函数式强两位是 1 1 这个就是老子说的 道可,道非,1生2 2生3 3生万物
自然中的植物的叶子也是按照这个生长,这个序列是最省能量的序列,序列是可控的
用兔子的繁殖来举例,
⒈斐波那契数列中任一项的平方数都等于跟它相邻的前后两项的乘积加1或减1;
⒉任取相邻的四个斐波那契数,中间两数之积(内积)与两边两数之积(外积)相差1
递归是很浪费cpu,迭代省cpu
实现5的阶乘
def factorial(n):
result = n
for i in range(1,n)
result *=i
return result
number = int(input('输入'))
result = factoral(number)
print("%d 的阶乘是:%d" % (number,result))
________________________________________
递归调用的条件 1 调用自身,自己调用掉自己 2有正确的返回条件 缺点是很容易崩溃,消耗cpu
def facorial(n):
if n ==1
retrun 1
else:
retrun n * factorial(n-1)
number =int(input('输入:'))
result = factorial(number)
print(%d 的 阶乘:%d %(number, result))
这是一个典型的递归 当递归到1的时候开始返回,运算是从最里一层1*2*3*4*5
——————————————————————
迭代实现 斐波那契
def fab(n):
n1=1
n2=1
n3=1
if n <1:
print('输入错误')
return -1
while (n-2) >0
n3 =n2+ n1 从1+1 开始
n1 = n2 增加了
n2 = n3
n -= 1
retrun n3
result = fab(20)
if result != -1:
print('一共有%d诞生' % result)
————————————————————
递归实现
def fab(n)
:
if n<1:
print(‘输入有误’ )
return -1
if n==1 or n==2:
retrun 1
else:
return fab(n-1) + fab(n-2) 递归成了 2个分支
》》》result=fab(20)
》》》if result !=-1
》》》 print ('总共有%d对小兔子' % result)
——————————————————————————————
24章 汉诺塔
def hanoi(n,x,y,z):
if n ==1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y) 将前n-1个盘子从x移动到y上
print(x,'--->',z) 将底下的最后一个盘子从x移动到z上
hanoi(n-1,y,x,z) 将y上的n-1个盘子移动到z上
n= int(input('输入汉诺塔的层数'))
hanoi(n,'x','y','z')
26 字典
dict4[2]='替换' 如果有这个索引就会替换,如果没有就会创建新的值
dict1={} 创建空的字典
dict1.formkeys((1,2,3)) 添加索引 数据为空
{1: None,2:None,3:None}
dict1.fromkeys((1,2,3),'Number') 3个索引匹配一个数据
dict1{1:'Number',2:''Number,3:'Number'}
dict1.formkeys((1,2,3),('one','two','three')) 后面数据参数始终是一个值
{1:('one','two','tree'),2('one','two','tree'),3...} 这是匹配的结果
dict1.formkeys((1,3),'数字') 只给 1和3赋值
》》》{1:'数字',3:'数字'} 会创建新的字典,而不是修改原来的
dict1=dict1.fromkeys(range(32),'赞')这就会创建32个元素的字典 从0 开始
for eachKey in dict1.keys():
print(eachKey) 输出每个键
for eachKey in dict1.values(): 查询数据
print(eachKey)
for eachKey in dict1.items(): 这个就是 键值对
print(eachKey)
dict1.get(32,'没有') get 查询 如果没有就返回没有,不设置会返回空
》》》没有
31 in dict1 >>>True
32 in dict1 >>> False
dict1.clear() 清空
dict1={} 这种方式 是不好 内存没清空数据还在 如果有赋值的化不会改变
id(dict) 查询内存位置
》》》48239624
r 是只读默认 w 创建 覆盖 x存在抛异常 a写入,末尾追加 b二进制 t 文本默认的
http://blog.csdn.net/chun_1959/article/details/45071861 文件的操作的介绍
f.readline() 以写入模式打开,如果文件存在,则在末尾追加写入
f.seek(offset,from) 移动文件指针,form(0代表起始位置,1代表当前位置,2代表末尾,offset 表示偏移多少个字节)
f.seek(45,0) 指针从起始位置偏移45的字节
f.read() 读取全部,指针到末尾 从前往后,指针到末尾就不能读了
f.read(5) 读取5个字符
f.tell 查询当前指针的位置 字节表示 一个字符等于2字节
list(f) 列表输出所有内容
f.seek(0,0)
0 时针归零
lines =list(f)
for each_line in lines:
print(each_line) 这样就没行输出了,但是占的空间大
————————
for each_line in f: 另一种写法
print(each_line)
f=open('E:\\test.text','w')
++++++++++++++++++
字符串操作 分割 split()
f=open('record.tet')
boy=[]
girl=[]
count=1
for each_line in f:
if each_line[:6] !='=====':
(role,line_spoken) = each_line.split(':',1)
if role =='':
boy.append()
else:
file_name_boy='boy_'+str(count)+'.txt'
file_name_boy='gile_'+str(count)+'.txt'
boy_file=open(file_name_boy,'w')
boy_file=open(file_name_girle,'w')
boy_file.writelines(boy)
girl_file.writelines(girle)
boy_file.close()
girle_file.close()
boy =[]
girl=[]
count +=1
file_name_boy='boy_'+str(count)+'.txt'
file_name_boy='gile_'+str(count)+'.txt'
boy_file=open(file_name_boy,'w')
boy_file=open(file_name_girle,'w')
boy_file.writelines(boy)
girl_file.writelines(girle)
boy_file.close()
girle_file.close()
f.close()