Hornerの方法

べき級数の計算
 f(x)=a_n x^n + a_{n-1} x^{n-1} + \ldots+ a_1 x + a_0
普通に計算すると掛け算の回数は
 x^n の項で n(n+1)/2回(等差級数
 a_n x^nの項で n回
足し算は n 回

Hornerの方法で計算回数を落とす。f(x)を以下のように変形する。
 f(x)= ( \ldots ((( a_n x + a_{n-1} ) x + a_{n-2} ) x + a_{n-3} ) x \ldots a_1 ) x + a_0
以下の漸化式を定義する。
f_i = f_{i-1} x + a_{n-i}
 f_0 = a_n
計算回数はn回の掛け算とn回の足し算になる。

以下がコード。

#horner.py
#! usr/bin/env python
# -*- coding :utf-8 -*-
import sys

x = raw_input("input x: ")
an = [1,2,3,4,5]
fi = an[-1]
#print fi
for a in reversed(an[:-1]):
    print fi
    fi = fi * int(x) + a
print "5x^4 + 4x^3 + 3x^2 + 2x + 1= ", fi