除法的递归算法

《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)

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Evan263/archive/2012/03/06/2381168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值