【发布时间】:2020-11-22 03:38:44
【问题描述】:
我做了一个递归函数来计算 x*y,其中 x 和 y 都是整数(x 和 y >= 0)。我的公式是: x * y =
- 0,如果 x 等于 0
- (x >> 1)*(y ,如果 x 是偶数
- (x >> 1)*(y ,如果 x 是奇数
“>”是左移和右移位运算符。这是我的代码:
int multiply(int x, int y) {
int y1 = 0;
if (x == 0) return 0;
else if (x % 3 == 0) {
y1 = y;
x = x >> 1;
y = y << 1;
return (multiply(x, y) + y1);
}
else if (x % 2 == 0) {
x = x >> 1;
y = y << 1;
return multiply(x, y);
}
}
上面的递归函数应该返回 (x*y) 值,但是当我测试时它们都错了,我不知道为什么。我做错了什么?我该如何解决这个问题?
【问题讨论】:
-
x % 3 == 0与x是奇数还是偶数无关。 -
x % 3 不是 n 奇数。它是可被 3 整除的数字的子集
-
通常使用按位检查奇偶校验
and是可以接受的,而且速度更快。例如1&1==1、2&1==0、3&1==1、4&1==0、5&1==1等
标签: c++ function recursion multiplication