分治法求x的n次方的JAVA程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治法求x的n次方的JAVA程序相关的知识,希望对你有一定的参考价值。

要求:用分治法求x的n次方,要求时间复杂度为Θ(lgn)。求给出JAVA的完整源程序

以下是使用分治法求x的n次方的Java程序:

Copy code
public class Power

public static void main(String[] args)
double x = 2.0; // 底数
double n = 10; // 指数
double result = power(x, n);
System.out.println(x + " 的 " + n + " 次方为:" + result);


// 分治法求幂运算
public static double power(double x, double n)
if (n == 0) // n为0时,直接返回1
return 1;

double half = power(x, n / 2);
if (n % 2 == 0) // n为偶数时,两半乘起来即可
return half * half;
else // n为奇数时,需要多乘一次x
return half * half * x;



首先,在 main() 方法中定义了底数 x 和指数 n。然后调用 power() 方法求 x 的 n 次方,并将结果输出到屏幕上。

power() 方法使用了分治法来实现幂运算。当 n 是0时,直接返回1;否则将 n 分成两半,分别递归求出两半的幂,然后根据 n 是奇数还是偶数来计算结果,最后返回计算结果。

由于每次递归将 n 除以2,因此该算法的时间复杂度为 Θ(lgn)。
参考技术A 计算X的n次方

public static int power(int x, int n)

int y = 0;

if (n == 0)

y = 1;

else


y = power(x , n/2); //递归

y = y * y;

if (y % 2 == 1)

y = y * x;


return y;

追问

求主函数部分的程序啊,不胜感激,急用啊。。。。。。。

追答

你随便写个main 调用一下不就得了

追问

不会啊,求帮助啊。。。。。。。。。。。。。。

追答

比如计算10的6次方
public static void main(Sting[] args)

int num = power(10,6);

System,out,print(num);


你还想要怎样

追问

不是X的N次方吗??这样不就只能算一个吗,而且的出来的结果怎么是10000啊?、奇怪了。。。

追答

不好意思 ,有一句代码打错了
if (y % 2 == 1) --> 把 y 改成n

本回答被提问者采纳

以上是关于分治法求x的n次方的JAVA程序的主要内容,如果未能解决你的问题,请参考以下文章

算法笔记_065:分治法求逆序对(Java)

C语言分治法求最近对问题 运行一直报错 求高手修改

[LeetCode] 50. Pow(x, n) Java

用Java编写程序,求n!

利用分治法求n个数的最大连续和

用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 ;带注释!