# horner

## solució 1: immersió amb índexs

def horner_1(p, x):
    return horner_1_i(p, x, 0)

def horner_1_i(p, x, i):
    if i == p.grau():
        return p[i]
    else:
        summ = horner_1_i(p, x, i+1)
        return summ*x + p[i]

## solució 2: immersió amb range

def horner_2(p, x):
    return horner_2_i(p, x, range(p.grau() + 1))

def horner_2_i(p, x, llesca):
    if len(llesca) == 1:
        return p[llesca[0]]
    else:
        summ = horner_2_i(p, x, llesca[1:])
        return summ*x + p[llesca[0]]

## solució 3: immersió amb índexs decreixents

def horner_3(pol, x):
    return horner_3_i(pol, x, pol.grau())

def horner_3_i(pol, x, i):
    if i == -1:
        r = 0.0
    else:
        r = pol[pol.grau()-i] + x * horner_3_i(pol, x, i - 1)
    return r

## tria la solució

#horner = horner_1
horner = horner_2
#horner = horner_3
