首页 > 编程笔记 > Java笔记 阅读:3

分治法求x的n次幂(Java实现)

求 x 的 n 次幂,可以利用简单的迭代法实现,也可将 x^n 看成是一个规模为 n 的 x 相乘问题,这样就可以将规模不断进行划分,直到规模为 1 为止。

求 x 的 n 次幂问题可分为两种情况:
根据以上分析,求 x 的 n 次幂问题可表示成以下递归模型:

当 n=1 时,如果程序要找全部解,在将找到的解输出后,应继续调整最后位置上填放的整数,试图找下一个解。相应的算法如下:


算法实现如下:
import java.util.Scanner;

public class ComputePow {
    float Divide_Pow ( float x, float n ) {
       float a;
       if ( n == 1 )
           return x;
       else if ( (int)n % 2 == 0 ) // n 为偶数
       {
           a = Divide_Pow(x,n/2);
           return a*a;
       }
       else // n 为奇数
       {
           a = Divide_Pow(x,(n-1)/2);
           return a*a*x;
       }
   }

   float Common_Pow ( float x, float y ) {
       float result = 1.0f;
       for ( int i = 1; i <= y; ++i )
       {
           result *= x;
       }
       return result;
   }

   public static void main(String args[])
   {
       float x; // 底数
       float n; // 幂
       System.out.print("请输入底数: ");
       Scanner sc=new Scanner(System.in);
       x=sc.nextFloat();
       System.out.print("请输入幂: ");
       n=sc.nextFloat();
       ComputePow CP=new ComputePow();
       System.out.println("普通的迭代法: "+x+"^"+n+"="+CP.Common_Pow(x,n));
       System.out.println("分治法: "+x+"^"+n+"="+CP.Divide_Pow(x,n));
   }
}
程序运行结果如下:
请输入底数:2
请输入幂:10
普通的迭代法:2.0^10.0=1024.0
分治法:2.0^10.0=1024.0
在利用分治法实现时:

相关文章