递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
由于题目要求使用递归函数实现,方法一:
class Solution {
public:
int multiply(int A, int B) {
if(A == 0 || B == 0)
return 0;
if(A < B)
return B + multiply(A-1,B);
else
return A + multiply(A, B-1);
}
};
之所以要判断A与B的大小,是因为使用小的作为循环次数,可以提高效率。
方法二:分治法
class Solution {
public:
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, B>>1) + multiply(A, B>>1) + C;
}
};
运行效率:
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:5.7 MB, 在所有 C++ 提交中击败了82.22%的用户