递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。

示例1:
 输入:A = 1, B = 10
 输出:10

示例2:
 输入:A = 3, B = 4
 输出:12

提示:

  • 保证乘法范围不会溢出

分析:

方法:模拟+位运算

3 * 4 可以看做 4 + 4 + 4,即 A 个 B 或 B 个 A 相加,让大的那个数当加数显然更节省时间一些,当小的数减为 0 时,终止循环。因为 3 * 4 可以看做 4 + 2 * 4 = 4 + ( 4 << 1 ),因此还通过判断小的那个数是否为偶数来进行移位运算。

时间复杂度:O(log n)          n 为 A、B 中最小的数,因为每遍历两次一定有一次为偶数,最优情况如 4 * 8 直接遍历 log n 次就可以了,最坏情况也不会达到 O(n)。
空间复杂度:O(log n)

class Solution {public int multiply(int A, int B) {//保证A比B小if(A > B){return multiply(B, A);}//A为0if(A == 0){return 0;}//A能被2整除if(A % 2 == 0){return multiply(A >> 1, B) << 1;}//递归return B + multiply(A-1, B);}
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/recursive-mulitply-lcci

JAVA练习174-递归乘法相关推荐

  1. python 递归乘法

    递归乘法 递归乘法. 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘.可以使用加号.减号.位移,但要吝啬一些.示例1:输入:A = 1, B = 10输出:10 示例2:输入:A = 3, ...

  2. java 7.函数-递归_带有谓词的Java中的函数样式-第1部分

    java 7.函数-递归 您一直在听到将要席卷全球的函数式编程,而您仍然坚持使用普通Java? 不用担心,因为您已经可以在日常Java中添加一些功能样式. 此外,它很有趣,可以节省许多代码行并减少错误 ...

  3. java 7.函数-递归_带有谓词的Java中的函数样式-第2部分

    java 7.函数-递归 在本文的第一部分中,我们介绍了谓词,这些谓词通过具有返回true或false的单一方法的简单接口,为Java等面向对象的语言带来了函数式编程的某些好处. 在第二部分和最后一部 ...

  4. java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)

    Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...

  5. 程序员面试金典 - 面试题 08.05. 递归乘法(位运算)

    1. 题目 递归乘法. 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘. 可以使用加号.减号.位移,但要吝啬一些. 示例1:输入:A = 1, B = 10输出:10示例2:输入:A = ...

  6. strassen算法java_使用java写的矩阵乘法实例(Strassen算法)_Java_软件编程

    Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...

  7. Java如何打印输出九九乘法表

    Java如何打印输出九九乘法表 -- -- -- -- -- -- -- -- -- -- -- -- -- 打印乘法表的方法 1.使用双重for循环打印九九乘法表 2.使用do{}while()实现 ...

  8. Java如何打印九九乘法表

    Java如何打印九九乘法表 分析: 要打印九九乘法表,可以借助双重循环先看整体,有9行,所以就先用一个for循环,for(i=1;i<=9;i++): 再将每一个看作一个整体,第一行打印一个,第 ...

  9. 用Java代码打印99乘法表

    用Java代码打印99乘法表: package Review.jiujiuChengFaBiao; public class Test32_ForExcersize { public static v ...

最新文章

  1. MaxCompute,基于Serverless的高可用大数据服务
  2. git 提交代码命令_Git命令可视化展示,代码管理再也不愁了,建议收藏!
  3. 第一章:linux管理文件和目录
  4. WF 创建 SQL 持久性数据库
  5. 自定义控件(视图)2期笔记13:View的滑动冲突之 内部拦截法
  6. Abp Uow 设计
  7. 【AI视野·今日CV 计算机视觉论文速览 第156期】Mon, 9 Sep 2019
  8. 数据结构中为什么输入数据还没输入完全就结束了_我岂能忍!面试官居然用数据结构和算法“羞辱”我...
  9. css在线工具_已迁移
  10. APP被苹果App Store拒绝的原因
  11. 声笔飞码6.00版使用指南
  12. html 4种居中方式
  13. 【Vulnhub靶场】NOOB: 1
  14. unity 彩带粒子_unity游戏缤纷五彩纸屑粒子特效Confetti FX 1.0
  15. CF - 1156D - 0-1-Tree
  16. 面向对象系列(二)-封装,继承,多态
  17. 2018.10.19学习总结
  18. 万国觉醒服务器维护,万国觉醒好像没看到1服怎么回事 官方关闭部分服务器公告[多图]...
  19. spring-boot、jeecg-boot中解除shiro限制了上传视频文件,以及设置上传文件大小的限制
  20. mc服务器常用指令_mc服务器新手指令

热门文章

  1. 【浏览器】1219- 换一种风格理解 Chrome 浏览器渲染全过程
  2. Python批量获取高校基本信息
  3. 武汉大学计算机技术上机难度,武汉大学计算机技术(专业学位)考研难不难和研究生专业好不好...
  4. python实现图片批量重命名
  5. 【学习笔记】云服务器入门教程(搭建云盘、网站,安装anaconda、WinSCP、宝塔面板等)
  6. java农业银行面试题
  7. 元宇宙:下一代互联网的“美丽新世界”
  8. gradle-6.7.1-all 快速下载
  9. 使用python实现IP反查域名
  10. c语言局部函数定义是非法的,疑难问题C语言求解释 为什么编译说是局部函数非法??...