python 数据结构与算法之相关递归例子
经典汉诺塔问题
思路:把上方n-1个盘子看成一个整体
1.把n-1个盘子从a经过c移动到b
2.把最后一个盘子移动到c
3.把n-1个盘子从b经过a移动到c
def hanoi(n, A, B, C):
if n > 0:
hanoi(n-1, A, C, B)
print("%s---------->%s" % (A, C))
hanoi(n-1, B, A, C)
hanoi(4, 'A', 'B', 'C')
辗转相除法(a,b最大公约数与最小公倍数)
先比较a, b大小,若不能整除,将除数与余数作为新的被除数与除数
def euclidean(a, b):
max = a if a>b else b
min = b if a>b else a
if max % min == 0:
return min
else:
return euclidean(min, (max % min))
print("最大公约数: "+ str(euclidean(8a251, 6105)))
最小公倍数 * 最大公约数= a * b
整数转化为任意进制
将一个十进制整数转化为任意进制(十六进制及以下)
结束条件,整除后的数小于base(多少进制)
用dict可以方便输出ABCDEF,并起到了由整数到字符的变化
def intToBase(Num, base):
dict = "0123456789ABCDEF"
if Num < base:
return dict[Num]
else:
return intToBase(Num//base, base) + dict[Num%base]
print(intToBase(1323, 16))