题目描述
描述:递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
输入:A = 1, B = 10
输出:10
输入:A = 3, B = 4
输出:12
解题思路
思路1:最直观的想法是,位运算+降次递归。A*B的计算可以根据B是奇数还是偶数来分类:如果B是偶数,那么A*B=(A+A)*(B/2);如果B是奇数,那么A*B=(A+A)*(B/2)+A。其中A+A可以通过A<<1实现,B/2可以通过B>>1实现,B是奇数还是偶数可以通过B&1实现。
int multiply(int A, int B)
{
if(B==0) return 0;
if(B==1) return A;
int C=0;
if(B&1)
C=A;
return multiply(A<<1,B>>1)+C;
}
总结:适当使用位运算可以加快速度提升效率!