什么叫算法
计算的方法 : 人脑复杂 计算机简单
99 * 13 = 1287 = 13*100 - 13
查找 : 找数据
排序 :
最短路径
学习算法的必要性
我们学习的算法 都是过去时
了解基础的算法 才能创造出更好的算法
不是所有的事情都能套用现成的方法解决的
有些时候会用到学过的算法知识来解决新的问题
应用1:二分查找算法 必须处理有序的列表,先把数据一分为二,再比较与要查找的数大小
#二分查找:递归函数的应用
l=[2,4,6,9,10,13,15,18,21,23,26,28,45,55,66,67,72,75,80,84,88,97,100]
def find(l,aim,start=0,end=None):#在封装函数的时候,并不知道传进来的l是什么,所以不能这样在默认参数里写end=len(l)
end=len(l) if end is None else end#这样就能每次递归的时候会用到新的end值
mind_ind=(end-start)//2+start
if end>=start:
if l[mind_ind]>aim:
return find(l,aim,start=start,end=mind_ind-1)
elif l[mind_ind]<aim:
return find(l,aim,start=mind_ind+1,end=end)
else:
return mind_ind #想要最后返回值,必须每层都要返回,所以上面还有两个return
else:
return('找不到这个值%s'%aim)
find(l,21)
应用2:斐波那契数计算:
#斐波那契数列:1,1,2,3,5,8,13,21,34,55,89——F[n]=F[n-1]+F[n-2]
#递归函数练习:求第n个斐波那契数是多少
def F(n,i=None,f=None):
i=2 if i is None else i
f=[1,1] if f is None else f
if n>i:
f.append(f[i-1]+f[i-2])
i+=1
return(F(n,i,f))
elif n==i:
f.append(f[i-1]+f[i-2])
return(f[i])
elif n==0 or n==1:
f[n]=1
return f[n]
else:
print('您输入的n为负数,请重新输入')
应用3:阶乘
def fq(n):
if n==1:
return(1)
return(n*fq(n-1))