【刷题】 leetcode 面试题 08.05.递归乘法

在这里插入图片描述

1 题目描述

在这里插入图片描述
来看题目描述,真可谓大道至简的描述啊。让我们不使用 *来实现乘法运算。

2 思路一(返璞归真版)

首先我就想到了乘法的加法表示:A * B = B 个 A 相加。
也可得到递推公式:
A * B = A * (B - 1) + A
我们很容易就可以构造出递归算法

int multiply(int A, int B){
   
	//B 为 1 直接返回B
    if(B == 1) return A;
    return A + multiply(A , B - 1);
}

来看运行效果:
在这里插入图片描述

3 思路二(二进制乘法器版)

接下来我们换一种方法,大家一定记得小时候计算乘法的时候,在纸上打草稿的那种竖式。这其实乘法器的思路。
在这里插入图片描述
来看代码:

int multiply(int A, int B){
   
    //乘法器
    //二进制运算
    //B 为乘数 不为零才继续
    if(B)
    {
   
        if(B & 1)//B 末位是1 
        {
   
            // A 左移(放大 因为下一位乘数进位)
            //使用 long long 类型防止 A 超出范围
            return multiply((long long)A << 1, B >> 1) + A;
        }
        else//B 为零 就不加 A
        {
   
            return multiply((long long)A << 1 , B >> 1);
        }
    }
    //B 为 0 直接返回 0 
    else 
        return 0;
}

运行效果:
在这里插入图片描述

4 思路三(变态版)

该思路也是使用了二进制乘法器的思路
巧妙的使用了三目运算符简化if语句。
来看代码:

int multiply(int A, int B){
   
	return B ? multiply((long long)A << 1,B >> 1) +((B & 1)? A:0) : 0 ;
}

来看效果:
在这里插入图片描述

Thanks♪(・ω・)ノ谢谢阅读

下一篇文章见!!!

相关推荐

  1. 算法day30:

    2024-01-29 11:26:03       23 阅读
  2. 【C++】优选算法——第一辑

    2024-01-29 11:26:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-29 11:26:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-29 11:26:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-29 11:26:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-29 11:26:03       20 阅读

热门阅读

  1. Vue视频图片的在线存储仓库【七牛云】的使用

    2024-01-29 11:26:03       39 阅读
  2. 前端VUE导出excel多sheet,适用单多导出

    2024-01-29 11:26:03       39 阅读
  3. C语言之猜凶手

    2024-01-29 11:26:03       35 阅读
  4. 将文件以指定格式存储~BMP~C的实现~FAT32格式

    2024-01-29 11:26:03       35 阅读
  5. js有哪些内置对象?

    2024-01-29 11:26:03       27 阅读
  6. 【前端基础--5】

    2024-01-29 11:26:03       27 阅读
  7. ubuntu 查看版本号、查看内核版本号

    2024-01-29 11:26:03       28 阅读
  8. Ubuntu18.04录音声音降噪

    2024-01-29 11:26:03       35 阅读
  9. python元组切片

    2024-01-29 11:26:03       35 阅读
  10. 基于stm32的伸缩晒衣架的设计

    2024-01-29 11:26:03       31 阅读