【递归专题一】Pow(x,n)-快速幂算法

news2024/9/20 23:01:11

Pow(x,n)-递归及迭代实现

题目链接:Pow(x,n)

在这里插入图片描述

解法一:暴力循环
如210则用10个2相乘,但是如果n=231-1,难道我们还要用n=231-1个2相乘吗?这样显然会超时。
解法二:快速幂算法

递归实现

任意数的指数都可以用二分的思想将指数分半,指数分半又可以划分为指数分半的数求得,一直到指数划分为0,这样时间复杂度就成了O(logn)
而每一次划分的过程不就是重复子问题吗
在这里插入图片描述对于指数n为负数:先按照原来的方法求出正的指数的值,最后将其求倒数。
在这里插入图片描述
如果n是-231,当求2 ^ (-231)时,231会整型移除,因为整型最大值为231-1,我们可以用long long存储。
最终代码实现如下:

class Solution {
public:
    double dfs(double x, int n)
    {
        if(n == 0) return 1.0;
        double tmp = dfs(x, n/2);
        return n % 2 == 0 ? tmp * tmp : tmp * tmp * x;
    }
    double myPow(double x, int n) 
    {
        return n >= 0 ? dfs(x, n) : 1.0 / dfs(x, -(long long)n); 
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

骑行耳机怎么选?精选五款权威实测热卖机型

作为一位深耕于运动科技领域多年的博主,可以说在此之间测试评论过各类运动装备,其中对于骑行爱好者而言,不可或缺的就是一款可以提高骑行体验的蓝牙耳机,其中,骨传导耳机凭借佩戴舒适健康等特点,收获了各类…

[星瞳科技]OpenMV如何进行串口通信?

串口通信上 视频教程27 - 串口通信发送数据:OpenMV串口发送数据 | 星瞳科技 视频教程28 - 串口通信接收数据:OpenMV串口接收数据 | 星瞳科技 介绍 为什么要用串口呢?因为要时候需要把信息传给其他MCU,串口简单,通用…

Qt-enable介绍使用(10)

目录 enable() 描述 相关 使用 观察切换过程 enable() 描述 相关 使用 观察切换过程 我们新建一个项目,设置两个按钮,并且把第二个按钮的objectName改一个明显的名字 关于名字这一点补充,显然我们在实际中要注意对象名字要尽量的通俗易…

C语言中函数sizeof和strlen区别

sizeof和strlen是C语言中的两个常用函数,它们的作用和使用方式有所不同。 sizeof sizeof是一个运算符而非函数,用于计算数据类型或变量占用的字节数。它可以计算任意数据类型(包括基本类型、自定义结构体、数组等)的大小。例如&…

如何使用博达网站群管理平台的树状导航

1 介绍 由于网站建设需要,需在首页的左边竖栏部分使用树状导航。我又过了一遍《网站群管理平台用户手册》,没发现如何在网站的首页设置树状导航组件。昨天,我之所以在创建树状导航上不知所措,是因为平台本身有一些误导&#xff0…

捷途山海T2 VS 唐DM-i:谁主沉浮?

自从新能源技术涌入汽车界,国内自主品牌便凭借电力驱动实现了跨越式发展。众多卓越车型如雨后春笋般涌现,在消费者市场中与合资品牌形成了激烈竞争,这无疑也增加了消费者选择车辆的难度。面对琳琅满目的优秀车型,消费者很容易陷入…

页面设计任务 个人简介页面

目录 任务要求 任务讲解 源码: 详细讲解 html部分 CSS部分 任务要求 页面结构: 创建一个基本的 HTML 页面,页面标题为“我的个人简介”。页面内容分为以下四个部分: 顶部导航栏: 包含至少三个导航链接,例如:“主页”、“关于…

计算机毕业设计选题推荐-二手房价分析与预测-Python爬虫可视化-算法

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

YOLOv8添加SE注意力机制有效提升检测精度(已跑通)

SE注意力机制概念 SSqueeze-and-Excitation (SE) 注意力机制是一种专注于增强网络模型对不同特征通道的重要性理解的机制。它通过对通道维度上的特征进行动态调整,增强了网络对重要特征的敏感性。 源码 import numpy as np import torch from torch import nn fro…

Ubuntu 22.04 上更换 Node 版本管理器(nvm)的源

在 Ubuntu 22.04 上更换 Node 版本管理器(nvm)的源,可以通过修改 nvm 的配置文件来实现。以下是更换 nvm 源的步骤: 打开终端。 备份原始配置文件(可选,但推荐): mv ~/.nvm/nvm.sh …

计算病理学中的Vision Transformer应用与挑战综述|顶刊精析·24-08-21

小罗碎碎念 这篇论文题为《Vision Transformers for Computational Histopathology》,综述了视觉变换器(Vision Transformers, ViTs)在计算病理学中的应用,包括图像分类、分割和生存风险回归等任务,并探讨了面临的挑战…

Modbus-TCP——Libmodbus安装和使用(Ubuntu22.04)

1、简介 Modbus是一种通信协议,广泛用于工业自动化和过程控制领域,允许不同设备之间进行数据交换。libmodbus是一个用于 Modbus 协议的开源库,主要用于开发和实现 Modbus 协议的客户端和服务器应用程序。libmodbus 以 C 语言编写&#xff0c…

后端开发刷题 | 合并两个排序的链表

描述 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围: 0≤n≤1000,−1000≤节点值≤1000 如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},…

python入门基础知识! 新手必备,看完技术突飞猛进!

基本的类 python最基础、最常用的类主要有int整形,float浮点型,str字符串,list列表,dict字典,set集合,tuple元组等等。int整形、float浮点型一般用于给变量赋值,tuple元组属于不可变对象&#x…

Nginx源码安装与进阶负载均衡

目录 一 web服务介绍 二 Nginx介绍与源码安装 2.1 nginx源码安装 2.2 平滑升级和回滚 三 配置文件详解 3.1 配置文件说明 3.2 全局配置与http模块 3.3 root与alias 3.4 location的介绍 3.5 账户认证 四 高级配置 4.1 nginx 压缩功能 4.2 变量介绍 五 nginx反向代…

【Android】adb devices 出现devices offline的问题

1 问题 adb devices 出现devices offline 2 解决方法 adb kill-serveradb start-server 然后,adb devices查看。 adb devices 问题解决啦。。。💛 💙 💜 ❤️ 💚 💛 💙 💜 ❤️…

韩顺平Java-第二十四章:MYSQL基础篇

一 数据库 1 数据库简单原理图 2 使用命令行窗口连接MYSQL数据库 (1)mysql -h 主机名 -P 端口 -u 用户名 -p密码; (2)登录前,保证服务启动。 3 MySQL三层结构 (1)所谓安装MySQL数…

第三期书生大模型实战营 第4关 Llamaindex RAG实践

前置知识 正式介绍检索增强生成(Retrieval Augmented Generation,RAG)技术以前,大家不妨想想为什么会出现这样一个技术。 给模型注入新知识的方式,可以简单分为两种方式,一种是内部的,即更新模…

ES6笔记总结(Xmind格式):第一天

Xmind鸟瞰图: 简单文字总结: es6知识总结: 新增语法: 1.let声明变量的特点: ①let 没有变量提升 ②在同一作用域下let的变量不能重复声明 ③let声明的变量存在块级作用域 2.const声明…

仿真软件的功能有哪些?仿真软件助力科研与工程领域

仿真软件是一种强大的工具,可以帮助工程师和科学家在虚拟环境中模拟和分析各种现象和系统。它们具有广泛的应用领域,包括工程设计、科学研究、产品开发和决策支持等。 随着科技的飞速发展,仿真软件已成为科研与工程领域中不可或缺的工具。本文…