package jianzhioffer;
/**
* 複寫pow函數,且x在正負100之內,指數也爲整數,首先直觀的想到第一種方法暴力循環相乘即可,只要注意指數負數的時候變爲除法
*
* 第二種也是能夠想到的遞歸,這種由類似相同子問題構成的大問題,都可以由遞歸解決
* 假設求pow(x,n) :1 當n爲偶數時,遞歸關係爲pow(x,n)=pow(x,n/2)*pow(x,n/2)
* 2 當n爲奇數時,遞歸關係爲pow(x,n)=pow(x,n/2)*pow(x,n/2)*x
* 注意每次遞歸調用pow(x,n/2)*pow(x,n/2)函數,因爲子問題相同,只需要調用一次pow即可
* 然後遞歸出口要注意: 1 當n==0時 直接返回1
* 2 當n<0時 返回1/x
* 3 當n>0時 返回x
*
* */
public class Q16 {
public double myPow(double x, int n) {
double re = 1;
if (n > 0) {
int i = 0;
while (i < n) {
re *= x;
i++;
}
} else if (n == 0) return 1;
else {
int i = 0;
while (i > n) {
re /= x;
i--;
}
}
return re;
}
double myPow2(double x, int n) {
if (n == 0) return 1;
if (n == 1)
return x;
if (n == -1)
return 1 / x;
double d = 1;
if (n % 2 != 0) {
if (n > 0)
d = x;
else d = 1 / x;
}
double r = myPow2(x, n / 2);
return r * r * d;
}
public static void main(String argc[]) {
System.out.println(new Q16().myPow2(34.00515, -3));
System.out.println(Math.pow(34.00515, -3));
}
}
LeetCode 劍指offer 16 數值的整數次方
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.