递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。 用c语言
时间: 2024-12-18 15:18:04 浏览: 5
递归乘法是一种利用加法运算和位操作来实现乘法的过程,通过不断地将一个数添加到另一个较小版本的结果上。这里是一个用C语言实现的简单递归函数示例,不直接使用`*`运算符:
```c
#include <limits.h> // 使用INT_MAX获取最大值
// 定义一个辅助函数,用于递归相乘
unsigned long long recursive_multiply(unsigned long long a, unsigned long long b) {
// 递归基本情况:当b为0,返回a
if (b == 0)
return a;
// 使用右移操作相当于除以2
unsigned long long half_b = b >> 1;
// 当b为奇数,递归地将a乘以半个b再加上a
// 因为half_b已经变成了原b的一半,所以不需要再右移
if (b & 1) {
return recursive_multiply(a << 1, half_b) + a;
}
// 当b为偶数,递归地只将a乘以一半
return recursive_multiply(a << 1, half_b);
}
int main() {
unsigned long long num1 = 123, num2 = 456;
unsigned long long result = recursive_multiply(num1, num2);
printf("两数相乘结果: %llu\n", result);
return 0;
}
```
这个函数首先检查基本情况(b为0),然后根据b的奇偶性进行递归计算。注意递归过程中可能会导致溢出,所以在实际应用中需要处理大整数的问题,例如使用更大范围的数据类型(如`long long`)或者循环方式。
阅读全文