zoukankan      html  css  js  c++  java
  • 【18】 递归 X的N次幂

    题目(我没想到这也能出成题目……)

    实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

    思路

    递归 比如3的5次方 = (3的2次方)的平方*3
    3的4次方的3的2次方)的平方,
    出口 n = 0 return 1 或 x =1return 1

    收获

    与操作
    n&1 可以偶数奇数

    代码

    public class Solution {
    
        public double myPow(double x, int n) {
            // 特判,也可以认为是递归终止条件
            long N = n;
            if (N < 0) {
                return 1 / myPow(x, -N);
            }
            return myPow(x, N);
        }
    
        private double myPow(double x, long n) {
            if (n == 0) {
                return 1;
            }
    
            if (x == 1) {
                return 1;
            }
    
            // 根据指数是奇数还是偶数进行分类讨论
            // 使用位运算的 与 运算符代替了求余数运算
    
            if ((n & 1) == 0) {
                // 分治思想:分
                double square = myPow(x, n >>> 1);
                // 分治思想:合,下面同理
                return square * square;
            } else {
                // 是奇数的时候
                double square = myPow(x, (n - 1) >>> 1);
                return square * square * x;
            }
        }
    }
    
    个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    express4.x socket
    validator
    服务管理,Dll查看
    复制程序,获取系统信息
    TCP HelloWord
    UDP HelloWord
    [置顶] 一个小马
    注册表编辑
    服务的启动与停止
    自下载运行
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12369723.html
Copyright © 2011-2022 走看看