4. Nombre d’or

El nombre d’or és un número molt conegut que es pot definir a partir dels nombres de Fibonacci, els quals es defineixen com

\begin{eqnarray} f_0 & = & 1 \\ f_1 & = & 1 \\ f_i & = & f_{i-1} + f_{i-2} \quad \forall i \geq 2 \end{eqnarray}

Així, els primers nombres de Fibonacci són \(1, 1, 2, 3, 5, 8, 13, ...\)

El nombre d’or és el límit dels quocients de cada parella de nombres consecutius de Fibonacci, és a dir, el límit de la successió \(1/1, 2/1, 3/2, 5/3, 8/5, ..., f_{n+1}/f_{n}\) per \(n>0\).

Al fitxer aprox.py disposes de la funció quocient_fib(n) que, donat n, retorna l’enèssim nombre d’aquesta successió \(q_{n} = f_{n+1}/f_{n}\). Descarrega’t aquest fitxer, perquè l’hauràs de fer servir per a resoldre el problema.

Dissenya la funció següent i desa-la al mòdul nombres (fitxer nombres.py).

nombres.nombre_or(eps)
Paràmetres:

eps (float) – nombre real positiu que representa una tolerància

Tipus de retorn:

(float, int)

Retorna:

parella formada per:

  1. l’aproximació del nombre d’or \(q_n\) definida anteriorment tal que \(|q_n - q_{n-1}| < eps\), i

  2. \(n\), el subíndex del terme \(q_n\) que compleix la condició del punt anterior.

Els següents doctests mostren exemples de com ha de respondre la funció:

>>> no1, n1 = nombre_or(0.01)
>>> round(no1, 2), n1
(1.62, 7)

>>> no2, n2 = nombre_or(0.1)
>>> round(no2, 2), n2
(1.6, 5)

>>> no3, n3 = nombre_or(0.001)
>>> round(no3, 3), n3
(1.618, 10)

Trobaràs més tests al fitxer test-nombre_or.txt