问题:实现一个求数值的整数次方函数。求base(double type)的exponent(int type)次方。

原理和讨论:

如果使用Python,哈哈哈,直接了当:

1
2
def power(base, exponent):
return base**exponent

这里**运算符触发数值对象(int,float)的__pow__方法。

考虑边界值:
(1)base为零的情况。
由于0的0次方数学上没有意义,Python默认返回0。
(2)base为负数的情况。
base为负数数学上是可以的。所以上面的函数依然可以返回正确值。

出于实用性,函数修改如下

1
2
3
4
5
6
7
8
9
10
11
12
class BaseZeroError(Exception):
pass

class BaseNotPositiveError(Exception):
pass

def power(base, exponent):
if base == 0:
raise BaseZeroError()
if base < 0:
raise BaseNotPositiveError()
return base**exponent

但这个实现还是使用了Python内置的计算。下面使用三种思路实现power。

实现

思路一:

(1)只考虑exponent为正数的情况
(2)不考虑base为0的情况。

1
2
3
4
5
def power(base, exponent):
result = 1
for _ in range(exponent):
result *= base
return result

思路二:

更高效的递归方法

1
2
3
4
5
6
7
8
9
def pow(x, n):
if n == 0:
return 1
if n < 0:
return 1 / pow(x, -n)
if n % 2 == 1:
return x * pow(x, n - 1)
else:
return pow(x * x, n // 2)