面试题 08.05. 递归乘法
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
示例 1:
- 输入: A = 1, B = 10
- 输出: 10
示例 2:
- 输入: A = 3, B = 4
- 输出: 12
思路
A * B = (A * 2) * (B / 2)
此时若B的二进制位的最后一位数为1,整型除法会丢掉余数1
即A * B = A * 1 + (A * 2) * ((B - 1) / 2)
当B为0时:
0 * 任何数 = 0,该乘法的值为0
Java代码实现
public static int multiply(int A, int B) {
if(B == 0){
return 0;
}
if((B & 1) == 0){
return multiply(A << 1, B >> 1);
}else{
return A + multiply(A << 1, B >> 1);
}
}