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

递归乘法算法

文章目录

  • 递归乘法
    • 题目链接
    • 题目详解
      • 解题思路:
      • 代码实现:
    • 结语

欢迎大家阅读我的博客,给生活加点impetus!!
在这里插入图片描述
让我们进入《题海探骊》,感受算法之美!!

递归乘法

题目链接

在线OJ

题目详解

在这里插入图片描述

这里需要注意保证整数乘法范围不会被溢出

解题思路:

有些人肯定就会直接写出A*B。

int multiply(int A, int B) {return A*B;
}
//或者
int multiply(int A,int B)
{if(B==0){return 0;}return A+multiply(A,B-1);
}

但是还有没有不使用乘法的方法呢?
有的,但是这个方法有点吃操作!!

乘法在现实中常见,十进制的乘法都会算,那二进制的乘法利用小学学的方法能不能够计算呢?我们来看一下

假如A=1101(二进制),B=1001(二进制)。
怎么算呢?我们把A*B展开,下来自己去实践一下。
这里直接来讲结论:

对于左移位操作,在二进制中实际是提升阶,比如1<<2=100=4,右移对应降低阶4>>1=10=2,和10进制中乘10和除10的作用一样。

我们来看一下左移和右移的原理

在这里插入图片描述
接下来我们就能够将例子这样改写:

在这里插入图片描述

代码实现:

int multiply(int A, int B){if(B){//判断b是否为0//从0阶(A*(B&1)*2^0)开始,每次算当前阶(A*(B&1)*2^n)的乘法相加,直到B右移完全,即B为0。if(B&1){//如果B的最后一位是1//B就能够乘A上去,递归算B右移第2位,然后求和+(1*A=A)。return multiply(A<<1,B>>1)+A;}else{//B就不能够乘A上去,递归算B右移第2位,然后求和+(0*A=0)。return multiply(A<<1,B>>1);}}// B为0返回0return 0;
}

理解:
1:因为这个变量的调整是位移,2倍调整的,时间复杂度是logn
2:<< 1 是将 A 左移一位,相当于 A * 2>> 1 是将 B 右移一位,相当于 B / 2
3:左移一位相当于乘2
4:B&1主要是为了判断这个结尾是否为1判断是否需要加A,递归的时候B右移,就能够取到B的所有位
5:涉及位移,按位与,三目操作符号等操作,由十进制乘法联想到二进制乘法。

我们最后来看解法代码:
这里我们可以使用三目操作符:

一般形式为condition? expression1 : expression2。其中condition是一个布尔表达式,expression1和expression2是两个不同的表达式或值。
当condition为true时,整个表达式的值为expression1的值;当condition为false时,表达式的值为expression2的值。

直接返回return B?multiply(A<<1,B>>1)+(B&1?A:0):0;

结语

感谢大家阅读我的博客,不足之处欢迎指正,希望大家有更好的思路与我交流!!
前日父子万日锛-铁杵磨成针!!加油!!
在这里插入图片描述

相关文章:

递归乘法算法

文章目录 递归乘法题目链接题目详解解题思路&#xff1a;代码实现&#xff1a; 结语 欢迎大家阅读我的博客&#xff0c;给生活加点impetus&#xff01;&#xff01; 让我们进入《题海探骊》&#xff0c;感受算法之美&#xff01;&#xff01; 递归乘法 题目链接 在线OJ 题目…...

从当下到未来:蓝耘平台和 DeepSeek 应用实践的路径探索,勾勒 AI 未来新蓝图

我的个人主页 我的专栏&#xff1a;人工智能领域&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞&#x1f44d;收藏❤ 引言&#xff1a;AI 浪潮中的双引擎 在人工智能蓬勃发展的时代&#xff0c;蓝耘平台与 DeepSeek 宛如推动这一浪潮前进的双引擎。…...

非标准纸张Word文件无损转换为A4标准纸张的完整教程

在日常办公中,常会遇到需要将非标准纸张大小的Word文档(如A3、B5等)调整为A4标准尺寸的需求。直接修改Word页面设置可能导致排版错乱,而通过 Adobe Acrobat 的印前检查功能可实现内容格式无损缩放。以下是详细操作流程: 一、Word转PDF:保留原始布局 保存为PDF格式 在Word…...

Xlua中C#引用Lua变量,导致Lua侧的GC无法回收的原因及解决方法

1. 引用关系导致&#xff1a; 在 XLua 中&#xff0c;当 C# 端引用了 Lua 变量时&#xff0c;Lua 的垃圾回收器&#xff08;GC&#xff09;不会回收这些被引用的变量。这是因为 Lua 的 GC 机制是基于引用计数和标记 - 清除算法的。当 C# 端持有对 Lua 变量的引用时&#xff0c;…...

38.日常算法

1.最短无序连续子数组 题目来源 给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组&#xff0c;并输出它的长度。 示例 1&#xff1a; 输入…...

Leetcode 算法题 9 回文数

起因&#xff0c; 目的: 数学法。 % 求余数&#xff0c; 拆开组合&#xff0c;组合拆开。 这个题&#xff0c;翻来覆去&#xff0c;拆开组合&#xff0c; 组合拆开。构建的过程。 题目来源&#xff0c;9 回文数&#xff1a; https://leetcode.cn/problems/palindrome-number…...

docker compose部署flink集群

本次部署2个jobmanager和3个taskmanager 一、部署zookeeper集群 flink使用zookeeper用作高可用 部署集群参考&#xff1a;docker compose部署zookeeper集群-CSDN博客 二、创建目录及配置文件 创建timezone文件&#xff0c;内容填写Asia/Shanghai 手动创建目录&#xff1a…...

树和二叉树_13

树和二叉树_13 一、HZOJ-245二、题解1.引库2.代码 一、HZOJ-245 货仓选址 ​ 在一条数轴上有 N 家商店&#xff0c;他们的坐标分别为 A[1]−A[N]。现在需要在数轴上建立一家货仓&#xff0c;每天清晨&#xff0c;从货仓到每家商店都要运送一车商品。为了提高效率&#xff0c;求…...

常用架构图:业务架构、产品架构、系统架构、数据架构、技术架构、应用架构、功能架构及信息架构

文章目录 引言常见的架构图I 业务架构图-案例模块功能说明1. 用户界面层 (UI)2. 应用服务层3. 数据管理层4. 基础设施层业务流程图示例技术实现II 功能架构图 -案例功能模块说明1. 船舶监控模块2. 报警管理模块3. 应急响应模块4. 通信管理模块5. 数据分析模块数据管理层基础设施…...

AI前端开发:解放创造力,而非取代它

近年来&#xff0c;人工智能技术飞速发展&#xff0c;深刻地改变着各行各业&#xff0c;前端开发领域也不例外。越来越多的AI写代码工具涌现&#xff0c;为开发者带来了前所未有的效率提升。很多人担心AI会取代程序员的创造力&#xff0c;但事实并非如此。本文将探讨AI辅助前端…...

qt的QMainWindow保存窗口和恢复窗口状态

保存窗口状态 QSettings settings("MyCompany", "MyApp"); // 指定存储的应用信息 settings.setValue("mainWindowState", saveState());saveState() 返回一个 QByteArray&#xff0c;包含 所有停靠窗口和工具栏的状态。QSettings 用于存储数据…...

Linux下使用poll函数编写UDP客户端、服务器程序

一、UDP服务器与客户端的区别 对于UDP服务器与客户端&#xff0c;两者都可以通过sendto和recvfrom函数收发数据&#xff0c;它们的主要区别是&#xff1a; 1.服务器一般是等待并响应来自客户端的请求&#xff0c;客户端则是主动发送请求并且等待服务器的响应。 2.服务器端要…...

算法17(力扣217)存在重复元素

1、问题 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 2、示例 &#xff08;1&#xff09; 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;…...

NO.16十六届蓝桥杯备战|for循环|七道习题|ceil|floor|pow(C++)

for循环 for循环语法形式 for 循环是三种循环中使⽤最多的&#xff0c; for 循环的语法形式如下&#xff1a; //形式1 for(表达式1; 表达式2; 表达式3) 语句;//形式2 //如果循环体想包含更多的语句&#xff0c;可以加上⼤括号 for(表达式1; 表达式2; 表达式3) { …...

深度学习实战基础案例——卷积神经网络(CNN)基于DenseNet的眼疾检测|第4例

文章目录 前言一、数据准备二、项目实战2.1 设置GPU2.2 数据加载2.3 数据预处理2.4 数据划分2.5 搭建网络模型2.6 构建densenet1212.7 训练模型2.8 结果可视化 三、UI设计四、结果展示总结 前言 在当今社会&#xff0c;眼科疾病尤其是白内障对人们的视力健康构成了严重威胁。白…...

(一)Axure制作移动端登录页面

你知道如何利用Axure制作移动端登录页面吗&#xff1f;Axure除了可以制作Web端页面&#xff0c;移动端也是可以的哦&#xff0c;下面我们就一起来看一下Axure制作移动端登录页面的过程吧。 第一步&#xff1a;从元件中拖入一个矩形框&#xff0c;并设置其尺寸为&#xff1a;37…...

C# 上位机--常量

引言 在 C# 上位机开发过程中&#xff0c;常量是一个基础且重要的概念。合理使用常量可以提高代码的可读性、可维护性和安全性。本文将深入探讨 C# 上位机中常量的定义、使用场景以及相关的示例程序&#xff0c;并通过图文结合的方式让读者更直观地理解常量的作用。 一、什么…...

【Linux】【进程】epoll内核实现

【Linux】【进程】epoll内核实现 1 epoll提供的三个函数 1.1 epoll_create(int size); epoll_create()成功返回内核事件表的文件描述符&#xff0c;失败返回-1size 参数现在并不起作用 1.2 epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); epoll_ctl()成…...

ICRA-2025 | 具身导航如何跨越地形障碍?SARO:通过视觉语言模型实现地形穿越

作者&#xff1a;Shaoting Zhu, Derun Li, Linzhan Mou, Yong Liu, Ningyi Xu, Hang Zhao 单位&#xff1a;清华大学交叉信息研究院&#xff0c;上海交通大学电子信息与电气工程学院&#xff0c;浙江大学计算机科学与技术学院&#xff0c;宾夕法尼亚大学GRASP实验室&#xff0…...

当 LSTM 遇上 ARIMA!!

大家好&#xff0c;我是小青 ARIMA 和 LSTM 是两种常用于时间序列预测的模型&#xff0c;各有优劣。 ARIMA 擅长捕捉线性关系&#xff0c;而 LSTM 擅长处理非线性和长时间依赖的关系。将ARIMA 和 LSTM 融合&#xff0c;可以充分发挥它们各自的优势&#xff0c;构建更强大的时…...

终结磁盘空间紧张局面,针对性处理重复、无用文件

软件介绍 在如今这个数字化浪潮汹涌的时代&#xff0c;咱们的电脑存储空间就像一个杂乱无章的储物间&#xff0c;被各种各样的重复文件塞得满满当当。这些重复文件&#xff0c;犹如隐藏在暗处的 “空间小偷”&#xff0c;悄无声息地吞噬着宝贵的硬盘空间&#xff0c;使得原本井…...

DeepSeek全生态接入指南:官方通道+三大云平台

DeepSeek全生态接入指南&#xff1a;官方通道三大云平台 一、官方资源入口 1.1 核心交互平台 &#x1f5a5;️ DeepSeek官网&#xff1a; https://chat.deepseek.com/ &#xff08;体验最新对话模型能力&#xff09; 二、客户端工具 OllamaChatboxCherry StudioAnythingLLM …...

高校LabVIEW开发调试中的常见问题

在高校进行LabVIEW开发调试时&#xff0c;常常面临硬件选型不当、方案设计不合理、布线不专业以及人员流动性强等问题。这些问题可能影响项目的进展和质量。本文将总结这些问题&#xff0c;并给出具体的解决方案&#xff0c;帮助学生和团队更高效地开展开发工作。 ​ 1. 硬件选…...

【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘

【故障处理】- RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00 一、概述二、报错原因三、解决方法 一、概述 使用xtts迁移&#xff0c;在目标端进行恢复时&#xff0c;遇到RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00’报错。 二、报错…...

K8S下载离线安装包所需文件

下载相关文件 官网下载地址集合https://kubernetes.io/zh-cn/releases/download/ 下载相关镜像 官网镜像描述 所有 Kubernetes 容器镜像都被部署到 registry.k8s.io 容器镜像仓库。 容器镜像支持架构registry.k8s.io/kube-apiserver:v1.32.0amd64, arm, arm64, ppc64le, …...

如何使用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天

手把手教你用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天 目录 文章目录 手把手教你用**Java**语言在**Idea**和**Android**中分别建立**服务端**和**客户端**实现局域网聊天**目录**[toc]**基本实现****问题分析****服务端**Idea:结构预览Server类代码解…...

泰勒公式推导以及常用展开式与近似计算

泰勒公式的基本思想是通过函数在某点的导数来逐渐构建一个多项式&#xff0c;该多项式能够近似函数在该点附近的值。我们通过一次次引入导数来改进近似&#xff0c;从而得到一个无限级数的展开。 准备工作&#xff1a;函数的定义和导数 假设我们有一个函数 f ( x ) f(x) f(x)…...

ArcGIS注册开发账号及API KEY

注册与激活 Sign up | ArcGIS Location Platform 填写信息&#xff0c;然后邮箱收到激活邮件&#xff0c;激活&#xff0c;再补充信息。 参考 Tutorial: Create an API key | Documentation | Esri Developer 产生API KEY Tutorial: Create an API key | Documentation |…...

Idea 插件 Quickly-Code-Toolkit

使用说明 &#xff08;一&#xff09;全局设置 Paging Wrapper Setting&#xff08;分页设置&#xff09; 功能&#xff1a;主要用于在方法写入时&#xff0c;为返回参数提供分页包装类。设置方式&#xff1a;需准确填写分页包装类的全限定名&#xff0c;例如&#xff1a;com…...

HTTP与Websocket

HTTP协议 概述 HTTP (Hypertext Transfer Protocol)&#xff0c;即超文本传输协议&#xff0c;是一种用于在客户端和服务器之间传输超文本&#xff08;例如网页、图片、音频、视频等&#xff09;的通信协议。它是万维网&#xff08;WWW&#xff09;的基础&#xff0c;负责在浏…...