递归(-)数值的整数次方
来源:互联网 发布:人工智能程序如何编写 编辑:程序博客网 时间:2024/06/06 15:35
问题:实现函数 double Power(double base, int exponet),求base的exponet次方。不考虑大数问题。
分析:
1)exponet=0, 值为0
2)exponet>0, 求指数次方
3)exponet<0, 求base的-exponet次方的倒数
注意:求倒数时,分母不能为0,即base=0的情况,因此要注意该特殊情况。
代码实现如下:时间复杂度是O(n)
public double Power(double base,int exponet){//base=0,exponet<0if(equal(base,0.0) && exponet<0)return 0.0;//exponet<0int absExponet=exponet;if(exponet<0)absExponet=-exponet;double result=PowerAbsExponet(base,absExponet);if(exponet<0)result=1.0/result;return result;}//end Power()private boolean equal(double num1,double num2){if( (num1-num2>-0.0000001) && (num1-num2<0.0000001) )return true;else return false;}//end equal()//loop, time consume:O(n)private double PowerAbsExponet(double base,int absExponet){double result=1.0;for(int i=0;i<absExponet;i++)result*=base;return result;}//end PowerAbsExponet()////recursion, time consume:O(n)//private double PowerAbsExponet(double base,int absExponet){////base case //if(absExponet==0)//return 1;//if(absExponet==1)//return base;//else{//return PowerAbsExponet(base, absExponet-1)*base;//}//end else//}//end PowerAbsExponet()注意:由于计算机表示小数都有误差,不能直接用等号(===)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为他们相等。如上面代码中的equal方法。
上面代码中的时间复杂度为O(n),有没有更高效率的算法?我们可以用下面公式计算
//recursion, time consume:O(logn)private double PowerAbsExponet(double base,int absExponet){//base case if(absExponet==0)return 1;if(absExponet==1)return base;else{if(absExponet%2==0) // absExponet & 0x1 ==0 return PowerAbsExponet(base*base, absExponet/2); //absExponet<<2elsereturn PowerAbsExponet(base*base, absExponet/2)*base;}//end else}//end PowerAbsExponet()时间复杂度为O(logn)
- 递归(-)数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 【IDE-Visual Studio】启动出错(chenlu-3):创建空文档失败
- 解决ext与ueditor同时使用,引入js文件冲突问题
- 黑马程序员——关于线程的总结
- 程序与bug
- 简历复印--原型模式
- 递归(-)数值的整数次方
- inux下如何挂载Windows分区
- 最长递增子序列
- CString测试
- [Android面试题-2] Activity和进程的关系
- java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1:
- LBP Feature in Matlab
- 对网站开发的分页操作的一点想法
- mySQL 数据 latin1 编码转换为 utf-8 编码的方法