問題描述:
分治的方法求an
算法分析:
如果 n 是偶數,可以分為 (an/2)*(an/2) 算法復雜度基本降低一半
如果 n 是奇數,可以分為 (an/2)*(an/2)*a 算法復雜度也基本降低一半
如果 n == 1 ,則直接返回 a
代碼實現:
#include<stdio.h>
#include<math.h>
int calc( int a, int n)
{
if(n== 1)
return a;
if(n% 2== 0)
return pow(calc(a,n/ 2), 2);
return pow(calc(a,(n- 1)/ 2), 2)*a;
}
int main()
{
puts( " To calculator a^n ,Please input a and n: ");
int a,n;
scanf( " %d%d ",&a,&n);
a=calc(a,n);
printf( " %d ",a);
#include<math.h>
int calc( int a, int n)
{
if(n== 1)
return a;
if(n% 2== 0)
return pow(calc(a,n/ 2), 2);
return pow(calc(a,(n- 1)/ 2), 2)*a;
}
int main()
{
puts( " To calculator a^n ,Please input a and n: ");
int a,n;
scanf( " %d%d ",&a,&n);
a=calc(a,n);
printf( " %d ",a);
}