求一个数连续乘方的和
问题:求xn+xn-1xn-2+...+x0的值。
第一种是比较素朴直接的算法。
@get_time def sum_power(x, n): """ 朴素直接的算法,例如x=5,n=5的时候。一共做了5次加法,1+2+3+4=10次乘法。 :param x: :param n: :return: """ res = 0 while n >= 0: res += x ** n n -= 1 return res
第二种是秦九韶算法。
@get_time def sum_power1(x, n): """ 秦九韶算法。先计算x**2的值,然后再x*(x**2),然后再x*(x*(x**2))。这样每次都可以利用上一次计算的结果。 一共做了4次乘法,5次加法。相比较朴素直接的算法,乘法少了一个量级。 :param x: :param n: :return: """ res = 0 m = 1 while n >= 0: res += m m = x * m n -= 1 return res