Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225667
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 781
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-08 10:41
个人简介

爱莉清

文章分类

全部博文(80)

文章存档

2018年(1)

2017年(18)

2016年(49)

2015年(7)

2014年(5)

我的朋友

分类: C/C++

2017-02-22 17:44:14

比如求2的3次幂可以分解为3个2相乘 2*2*2,x=2的n=5次幂就是2*2*2*2*2 == (2*2)*2*(2*2) == 4*2*4
倒过来就是 4*2*4 -> 2*2*2*2*2  也就是
n 是偶数的时候 result = mi(x, n/2) *  mi(x, n/2);
n 是奇数的时候 result = mi(x, (n+1)/2) *  mi(x, (n-1)/2);

递归到什么时候为止呢? 分解到不能再分解位置也就是n 个x的1次幂相乘。即分解到mi(x,1)为止。

代码如下:



点击(此处)折叠或打开

  1. #include <stdio.h>


  2. long mi(long x, int n){
  3.     long result;
  4.     if(n==1){
  5.         return x;
  6.     }
  7.     if( n%2 == 0 ){
  8.         result = mi(x,n/2) * mi(x,n/2);
  9.     }
  10.     else{
  11.         result = mi(x,(n+1)/2) * mi(x,(n-1)/2);
  12.     }
  13.     return result;
  14. }

  15. void main (void)
  16. {
  17.     int x=2;
  18.     int n = 30;

  19.     printf(" %d 的 %d 次幂 = %d\n",x,n,mi(2,30));
  20.     return ;
  21. }


阅读(2532) | 评论(0) | 转发(0) |
0

上一篇:【初学算法】之八皇后问题

下一篇:133

给主人留下些什么吧!~~