分治算法
代码模板
divide_pro{
问题解决
if problem is none:
print result
return;
处理当前逻辑,如何分成子问题
data = prepare_data(problem)
subproblems = split_problem(problem,data)
调用函数,下探一层解决子问题
subres1 = divide_pro(subproblems[0]...)
subres2 = divide_pro(subproblems[1]...)
subres3 = divide_pro(subproblems[2]...)
组装结果
result = process_result(subres1,subres2,subres3)
}
/*
* 问题:pow(x,n)
* 子问题:pow(x,n/2)
* 奇数:subres*subres*x
* 偶数:subres*subres
*/
public class Main {
public static void main(String[] args) {
double x = 2.10000;
int n = 3;
if(n < 0) {
n = -n;
x = 1/x;
}
double result = fastpow(x,n);
System.out.println(result);
}
public static double fastpow(double x, int n) {
if(n == 0)
return 1.0;
//处理子问题
double res = fastpow(x,n/2);
if(n %2 == 0)//合并结果
return res*res;
else
return res*res*x;
}
}