数值的整数次方的高效率鲁棒性解法

2017-03-31 18:35 阅读 475 次 评论 0 条

这道题出自剑指0ffer,题目是这样说的,实现一个函数,求一个数的整数次方,要求不得使用库函数,同时不考虑大数问题,这道看似很简单的算法,其实暗藏着不少陷阱,下面就各种版本一一讲解。

只考虑了指数是整数的情况

上述代码简单易懂,能处理大部分的数据,但是遗憾的是,如果输入的指数小于1即是零和负数的时候就会出错,所以上述代码仅仅考虑了指数为正的情况,这样的代码是很差劲的。

引入全局变量标识错误

为了处理指数为负数的情况,我们可以对指数求觉得值,然后在算出次方的结果后求其倒数,但是值的注意的是,当底数为0且指数是负数的时候,对0求倒数必然导致程序奔溃,因此也就引入全局变量用来标志特殊状态。

上述代码采用全局变量来表示是否出错,如果出错,则返回0.0,但为了区分是出错的时候返回0,还是底数为0时返回0,需要再加入一个标志位即全局变量iState。但是函数的调用者很有可能会忘记去检查iSate以判断是否出错,随之而来的就是安全隐患,这比第一种的问题更恐怖,因此这样的代码也是不可取的。

高效率递归版本

上面这个公式大家想必都不陌生,这个公式很容易就能用递归实现。我们在使用时,需要把特殊情况划分出来考虑,还有就是指数是偶数还是奇数,具体实现如下:

值得注意的是,当我们使用移位运算可以解决四则运算的问题时,最好使用移位运算,位运算的效率要比乘除法带来的效率高很多,这样算法可以更优,也是平时我们应该注意的。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:数值的整数次方的高效率鲁棒性解法 | 术与道的分享
分类:编程素养 标签:,
1024do.com导航_术与道导航平台

发表评论


表情