除法的递归算法

《Algorithms》书中18页给出了乘法的递归算法的伪代码,并且之前也给了公式。但是由于除法只有伪代码没有公式的证明支持,我为了让自己知其然而且还要知其所以然,于是想自己证明之。

 

首先 我们设  a=(x1)*y+(b1)  并且【a/2】=(x2)*y+(b2)  

 

把a除以2并且做取整运算。这个时候会出现两种情况,第一种是a为偶数,则 【a/2】 = a/2 ,第二种是【a/2】 = (1/2)*(a-1)

 

a为偶数的时候,上面等式的右边则是(1/2)*((x1)*y+(b1))。 a为奇数,上面等式右边是(1/2)*((x1)*y+(b1-1))。

分别和【a/2】=(x2)*y+(b2)相比,匹配系数。

 

则有:

a为基数时

x1 = 2*(x2)

b1 = 2*(b2)

 

a为偶数时

x1 = 2*(x2)

b1 = 2*(b2) + 1                   //注1

 

所以,有书上的伪代码递推式:

function divide(x,y)

Input: Two n-bit integers x and y, where y  1

Output: The quotient and remainder of x divided by y

 if x = 0: return (q,r) = (0,0)

 (q,r) = divide(bx=2c,y)

q = 2  q; r = 2  r

if x is odd: r = r + 1

if r >= y: r = r - y; q = q + 1    //接注1   如果b1(也就是r)大于y,那么b1要减去y,并且(x2)加1.

 return (q,r)

 

 

 

 

 

 

 

 

 

posted on 2012-03-06 21:21  Evan263  阅读(931)  评论(0编辑  收藏  举报