Guide for Bitlles (1)
Com abordar aquest problema
Cada fila del triangle de bitlles té tantes bitlles com el número de la fila (fila 1 té 1 bitlla, \ fila 2 en té 2, etc). Has de dir quantes bitlles calen en total per a n files, però resolent-ho \ amb recursivitat, tal com demana l'enunciat.
Idea general:
- Pensa el problema en termes del cas anterior: si ja saps quantes bitlles calen per a n-1 \ files, quantes en calen per a n files? (Quantes bitlles té, ella sola, la fila número n?)
- Defineix el cas base: quantes bitlles calen quan no hi ha cap fila?
- Escriu una funció recursiva que es cridi a si mateixa amb un valor més petit, i sumi el que \ calgui segons el raonament del pas 1.
- Per cada cas de prova, crida la funció amb el n donat i mostra el resultat.
Paranys habituals:
- Amb n=1000 el total de bitlles és un número gran: fes servir un tipus de dades que admeti \
nombres grans (per exemple
longen Java; en Python els enters no tenen aquest límit). - Assegura't que la recursivitat té un cas base clar; si no, el programa no acabarà mai.
- Compte amb la profunditat de la recursivitat si n és gran: alguns llenguatges tenen un límit \ de crides recursives per defecte que potser cal ampliar.
Pista per a Java
Fes servir un mètode static que es cridi a si mateix, retornant un long per evitar \
desbordaments amb valors grans de n:
import java.util.*;
public class Main {
static long bitlles(int n) {
// cas base: quantes bitlles calen si no hi ha cap fila?
if (n == 0) {
return 0;
}
// cas general: bitlles(n) en funcio de bitlles(n-1) i de la fila n
return bitlles(n - 1) + n;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int casos = Integer.parseInt(sc.nextLine().trim());
for (int i = 0; i < casos; i++) {
int n = Integer.parseInt(sc.nextLine().trim());
System.out.println(bitlles(n));
}
}
}