#递归
#汉诺塔
#n个盘子时:
# 1、把n-1个圆盘从A经过C移动到B
# 2、把第n个圆盘从A移动到c
# 3、把n-1个小圆盘从B经过A移动到c
# h(n)=2h(n-1)+1 约等于2的n次方
def func(n,a,b,c):#移动过程
i=0
if n > 0:
func(n-1,a,c,b)#a经过c移动到b
print("moving from %s to %s" %(a,c))#从a移动到c
func(n-1,b,a,c) #b经过a移动到c
def f(n):
if n==0:
return 0
else:
return 2*f(n-1)+1
x=int(input("请输入片的个数:"))
func(x,'A','B','C')
print("需要移动",f(x),"次")
顺序查找
#顺序查找:也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止
#内置列表函数index()
#enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
def linear_search(li,val):
for ind,v in enumerate(li):
if v == val:
return ind
else:
return None
li1=(3,6,6,7,8,9,2)
print(linear_search(li1,3))
二分查找
#二分查找法
def binary_search(li,val):
left = 0
right = len(li) - 1
while left <=right: #候选区有只
mid = (left + right) // 2
if li[mid] == val:
return mid
elif li[mid] > val: #查找的值在左边
right = mid - 1
else: #查找的值在右边
left = mid + 1
li1=[1,2,3,4,5,6,7,8,9]
print(binary_search(li1,5))