当前位置: 首页 > news >正文

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

在这里插入图片描述

递归乘法

  • 1 题目描述
  • 2 思路一(返璞归真版)
  • 3 思路二(二进制乘法器版)
  • 4 思路三(变态版)
  • Thanks♪(・ω・)ノ谢谢阅读
  • 下一篇文章见!!!

1 题目描述

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

2 思路一(返璞归真版)

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

int multiply(int A, int B){//B 为 1 直接返回Bif(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♪(・ω・)ノ谢谢阅读

下一篇文章见!!!

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=4qjiwoelvomd

http://www.lryc.cn/news/290779.html

相关文章:

  • C语言实现希尔排序算法(附带源代码)
  • R语言【taxlist】——subset():取taxlist对象的子集
  • 单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇2)
  • 《动手学深度学习(PyTorch版)》笔记4.1
  • OpenAI发布新模型!ChatGPT性能重磅提升,API大幅降价,GPT-4 「变懒」被修复
  • 【C深度解剖】计算机数据下载和删除原理
  • ASTORS国土安全奖:ManageEngine AD360荣获银奖
  • clang--cpplint--gitlint
  • Web开发8:前后端分离开发
  • 基于 java+springboot+mybatis电影售票网站管理系统前台+后台设计和实现
  • 【INTEL(ALTERA)】错误:*.onchip_flash_0:UFM 扇区不支持“隐藏”模式。请更新访问模式设置
  • 备战蓝桥杯---数据结构与STL应用(基础3)
  • 「优选算法刷题」:只出现一次的数字Ⅲ
  • Vue-43、Vue中组件自定义事件
  • GitHub 开启 2FA 双重身份验证的方法
  • ASP.NET Core 过滤器 使用依赖项注入
  • 2024年的网创之路应该这样走才对
  • ssh异常报错:Did not receive identification string from
  • MIDI码深度解析
  • 小红书如何做混部?
  • [PHP]严格类型
  • 作为程序员,你必须学会Maven
  • UDF学习(三)数据访问宏
  • Web3技术革新:重新定义在线体验
  • 从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
  • nvm 工具使用介绍
  • Shell 入门_1
  • 力扣hot100 柱状图中最大的矩形 单调栈
  • 018 用户交互Scanner
  • 华为HCIE课堂笔记第十七章 广域网互联技术