求一个数连续乘方的和

问题:求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

 

posted @ 2019-10-17 23:45  walle_zhao  阅读(377)  评论(0编辑  收藏  举报