1. 迭代算法
public static int power(int n,int m){
int temp=1;
for(int i=0;i<m;i++)
temp*=n;
return temp;
}
2. 递归算法
n^m == n^((m/2) * 2)
n^m == (n^(m/2))^2
因此采用递归算法:
m为偶数: n^m = n^(m/2) * n^(m/2)
m为奇数: n^m = n^(m/2) * n^(m/2) * n
public class Power {
public static void main(String[] args) {
int n=2;
int m=4;
System.out.println(power(n,m));
}
public static int power(int n,int m){
if(m==0) return 1;
if(m==1) return n;
return m%2 == 0?power(n,m/2)*power(n,m/2):power(n,m/2)*power(n,m/2)*n;
}
}
3.两者比较:
(1)、迭代算法空间复杂度O(1),时间复杂度 O(m)
(2)、递归算法空间复杂度O(logm),时间复杂度 O(logm)
(3)、递归要快于迭代但需要更大的空间。