【分治算法】计算a^n
采用分治算法,将a^n看作两部分幂的乘积,每一部分都是一个子问题,即。如果选用蛮力算法对a进行n-1次相乘,算法的时间复杂度为O(n)
·
如果选用蛮力算法对a进行n-1次相乘,算法的时间复杂度为O(n)
采用分治算法,将a^n看作两部分幂的乘积,每一部分都是一个子问题,即
n为偶数
n为奇数
该情况下的时间复杂度W(n)为:
W(n) = W(2/n) + O(1)
W(1) = 0
于是得到
C语言程序实现如下:
//例2.2(分治算法)
//输入:n、a,a为给定的实数,n为自然数
//输出:a^n的结果
#include<stdio.h>
#include<stdlib.h>
int fun(int a,int n)
{
int result;
if(n==1)
{
return a;
}
else if(n==0)
{
return 1;
}
else if(n%2==0)
{
result = fun(a,n/2) * fun(a,n/2);
return result;
}
else
{
result = fun(a,(n-1)/2) * fun(a,(n-1)/2) * a;
return result;
}
}
int main()
{
int a,n,result;
printf("请输入a的值:");
scanf("%d",&a);
printf("请输入n的值:");
scanf("%d",&n);
result=fun(a,n);
printf("a^n = %d",result);
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)