Llicència
Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència
Autors:
Exercicis Recursivitat
- Usa el mateix projecte que l'usat als exercicis
- Crea un package cat.itb.elteuusuari(*).dam.m03.uf2.recursivity
- La classe de cada exercici ha de ser el nom de l'exercici
(*) elteuusuari correspon a la direcció de correu eltectrònic del centre, sense punts, fins a @itb.cat
Sumari
- Npometes
- MultiplicationRecursive
- DotLineRecursive
- Power
- Figures
- Factorial
- ListMaxValueRecursive
- Ampliació
Npometes
- Volem fer un programa que escrigui la cançó de N pometes té el pomer (és repeteix fins a que ja no queden pomes)
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.
- Tenim ja feta la següent funció que retorna l'estrofa per un nombre de pomes
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.
"""
- Fes la següent funció que retorna la cançó sencera. Pots fer-ho sense usar un while o un for?
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
- Demana un enter a l'usuari.
- Imprimeix per pantalla tants punts com l'usuari hagi indicat
- Usa una funció recursiva
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
- ?
- ?
- ?
- ?