算法(第4版).[美]Robert Sedgewick 笔记:
第47页,有一个很有意思的算法,用递归实现了2个10进制的加法转变为1个10进制和1个2进制的各位乘积的加法。
#!/usr/bin/env python3
#coding=utf-8
#一个巧妙的程序,把2个10进制的数的加法,变成1个10进制按二进制累加的算法。
def f(a,b):
if int(b) == 0:
return 0;
elif int(b)%2 == 0 :
y1=f(a+a,b/2)
print("previously b:%d,b mod 2:%d,a:%d,f():%d"%(b,int(b%2),a,y1))
return y1
else :
y2=f(a+a,b/2)+a
print("previously b:%d,b mod 2:%d,a:%d,f():%d"%(b,int(b%2),a,y2))
return y2
a=f(21,12)
print(a)
def Binary(a):
if int(a)==0:
return 0
elif int(a)%2 == 0 :
print('0')
return Binary(a/2)
elif int(a)%2 == 1 :
print('1')
return Binary(a/2)
Binary(12)