Guide for Bitlles (1)


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.
Mostra el codi per a: Consideracions generals Java 11 Python 3

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:

  1. 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?)
  2. Defineix el cas base: quantes bitlles calen quan no hi ha cap fila?
  3. 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.
  4. 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 long en 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));
        }
    }
}

Tornar al problema