python递归实现二分查找、汉诺塔问题
二分法递归解决
def findNum(lst, a, b, num):
"""
定义一个函数,使用二分法查找某元素在有序列表中的位置
:param lst: 有序列表
:param a: 列表的起始位置
:param b: 列表的结束位置
:param num: 要查找的元素
:return: 返回要查找的元素在有序列表中的位置
"""
# 当要查找的元素在目标列表中时
if num in lst:
# 找出目标列表中间元素的下标
middle = int((a + b) / 2)
# 如果要查找的元素等于中间元素
if lst[middle] == num:
return '输入数字在列表中的索引是%d' % middle
# 如果要查找的元素大于中间元素
elif lst[middle] < num:
return findNum(lst, middle, b, num)
# 如果要查找的元素小于中间元素
else:
return findNum(lst, 0, middle, num)
# 当要查找的元素不在目标列表中时
else:
return None
# 随机定义一个有序列表
lst1 = [1, 5, 8, 12, 26, 45, 86, 112, 258, 598, 698]
num1 = int(input('请列表中输入一个数字:'))
# 调用函数并输出
print(findNum(lst1,0,len(lst1),num1))
汉诺塔:
#汉诺塔
def hanio(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
hanio(n-1,a,c,b)
print(a,'-->',c)
hanio(n-1,b,a,c)
n,a,b,c = 3,'A','B','C'
hanio(n,a,b,c)
求和,例如:1+2+3+4+5+6=?问题
def f(x):
if x==1:
return 1
else:
return x+f(x-1)
a=f(6)
print(a)