.. py:module:: calamarsa .. warning:: Per a resoldre aquest exercici **no es poden fer servir iteracions (ni** ``for`` **ni** ``while`` **)**, només funcions recursives. Calamarsa ========= Considerem la següent operació sobre qualsevol nombre natural arbitrari: * Si el nombre és parell, el dividim per dos. * Si el nombre és senar, el tripliquem i li afegim una unitat. Si aquesta operació la fem repetidament a partir d'un nombre natural, genera una seqüència de nombres naturals infinita que acaba passant pel valor 1, a partir del qual, la seqüència es fa infinita repetint la subseqüència :math:`4, 2, 1`. Aquesta darrera afirmació s'anomena la `conjectura de Collatz `_, doncs no s'ha pogut demostrar matemàticament. Com que la seqüència puja i baixa de valors de manera semblant a com cau la calamarsa, l'anomenarem *calamarsa*. En el fitxer :file:`calamarsa.py` dissenyeu la funció recursiva: .. py:function:: calamarsa(n) A partir d'un nombre natural :math:`n>0`, genera una llista de la seqüència :math:`n_0,n_1,n_2,\ldots,1` on :math:`n_0=n`, i per :math:`i>0`, cada valor :math:`n_i` es determina fent el següent càlcul: .. math:: n_i = \begin{cases} n_{i-1}/2 &\text{si } n_{i-1} \text{ és parell}\\ 3n_{i-1}+1 & \text{si } n_{i-1} \text{ és senar } \end{cases} \quad\forall i>0 La generació de la llista acaba quan trobem un :math:`n_i` tal que :math:`n_i=1` Per exemple, .. literalinclude:: test-calamarsa.txt :language: python3 :lines: 1- .. note:: Disposeu de jocs de prova al fitxer :download:`test-calamarsa.txt` i d'una solució a :download:`calamarsa.py`