Exercicis Recursivitat

(*) elteuusuari correspon a la direcció de correu eltectrònic del centre, sense punts, fins a @itb.cat

Sumari

  1. Npometes
  2. MultiplicationRecursive
    1. Input
    2. Output
  3. DotLineRecursive
    1. input
    2. output
  4. Power
  5. Figures
  6. Factorial
  7. ListMaxValueRecursive
  8. Ampliació
    1. SlowUpDownList
      1. Input
      2. Output
    2. SlowUpDownList2
      1. Input
      2. Output
    3. FamilyTree
      1. Output

Npometes

N pometes té el pomer,
de N una, de N una,
N pometes té el pomer,
de N una en caigué.

Si mireu el vent d'on vé
veureu el pomer com dansa,
si mireu el vent d'on vé
veureu com dansa el pomer.
fun getAppleSongStanza(applesCount: Int) = 
    """
        $applesCount pometes té el pomer, 
        de $applesCount una, de $applesCount una,
        $applesCount pometes té el pomer,
        de $applesCount una en caigué. 
        Si mireu el vent d'on vé 
        veureu el pomer com dansa, 
        si mireu el vent d'on vé
        veureu com dansa el pomer.
    """

fun getAppleSong(applesCount: Int):String

MultiplicationRecursive

Calcula el producte de dos naturals mitjançant la suma i crides recursives.

Input

 5 3

Output

15

DotLineRecursive

input

10

output

..........

Power

Calcula la potència de dos naturals mitjançant el producte

Figures

Fer un programa que llegeixi un nombre enter positiu n i
escrigui el nombre de xifres que té.

Factorial

Calcula el factorial d'un valor

ListMaxValueRecursive

L'usuari introduirà una llista d'enters, com s'indica al mètode ListReader.
Un cop llegits tots, printa per pantalla el valor més gran.
Usa una funció recursiva per calcular el màxim.

Ampliació

SlowUpDownList

Definirem un SlowUpDown com una llista de números que, la diferència entre cada número i el següent és d'1.

Un exemple de llista SlowUpDown és el següent:
1 2 3 4 5 4 3 4 5 6 5 4 3 2

Volem fer un progama que donada una llista amb alguns valors determinats i algunes incògnites ens indiqui si podem crear una llista SlowUpDown.
Per exemple, si tenim la següent llista:
5 ? ? ? ? ? 11 ? 11 ? ? 8

Podem crear la llista SlowUpDown següent
5 6 7 8 9 10 11 10 11 10 9 8

L'usuari introduirà primer la llargada de la llista. Després introduirà les diferents caselles fixades. Escriurà -1 quan ja hagi acabat.
Indica si és "possible" o "impossible"
Nota: la primera casella i l'última de la llista sempre estan definides.

Input

12
0 5
6 11 
8 11
11 8
-1

Output

possible

SlowUpDownList2

En cas de que es pugui construir indica la llista resultant

Input

12
0 5
6 11 
8 11
11 8
-1

Output

[5, 6, 7, 8, 9, 10, 11, 10, 11, 10, 9, 8]

FamilyTree

Volem fer un petit programa que imprimeixi per pantalla l'arbre genealògic d'una persona. Ens han donat ja feta la classe Persona i les dades de la família.

Implemneta la funció printFamilyTree per a que produeixi l'output de mostra.

data class Person(val name: String, val father: Person? = null, val mother: Person? = null)

fun main() {
    val person = Person("Ot", Person("Jaume", Person("Pere"), Person("Mar")), Person("Maria", Person("John", null, Person("Fatima", Person("Ali")))))
    printFamilyTree(person)
}

Output

- Ot
   - Jaume
      - Pere
         - ?
         - ?
      - Mar
         - ?
         - ?
   - Maria
      - John
         - ?
         - Fatima
            - Ali
               - ?
               - ?
            - ?
      - ?