repeat e break
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 49 di 64.
repeat esegue il suo corpo più e più volte finché un break al suo interno non interrompe il ciclo. È adatto a un ciclo la cui condizione di uscita è nota solo a metà del corpo:
n <- 1
repeat {
n <- n * 2
if (n > 50) break
}
print(n)Output:
[1] 64La sequenza di Collatz è un esempio: dimezza i numeri pari, trasforma quelli dispari in 3n + 1 e fermati a 1. Il numero di passaggi non è noto in anticipo:
n <- 6
steps <- 0
repeat {
if (n == 1) break
n <- if (n %% 2 == 0) n / 2 else 3 * n + 1
steps <- steps + 1
}
print(steps)Output:
[1] 8next salta il resto dell'iterazione corrente e avvia quella successiva. Funziona nei cicli repeat, while e for:
for (x in 1:8) {
if (x %% 3 == 0) next
cat(x, "")
}
cat("\n")Output:
1 2 4 5 7 8 Un ciclo repeat senza un break raggiungibile non termina mai. Usa un contatore come limite di sicurezza quando l'uscita dipende dai dati:
total <- 0
tries <- 0
repeat {
tries <- tries + 1
total <- total + tries
if (total >= 20 || tries == 100) break
}
print(c(tries, total))Output:
[1] 6 21Sfida
FacileCompleta digital_root(n). Sostituisci n con la somma delle sue cifre finché non rimane una sola cifra, e restituisci <result> after <steps> steps: 9875 dà 2 after 3 steps (9875, 29, 11, 2). Un numero che ha già una sola cifra richiede 0 passaggi.
sum(as.numeric(strsplit(as.character(n), "")[[1]])) somma le cifre di n.
Il codice fornito legge n e stampa il valore restituito.
Provalo tu
digital_root <- function(n) {
# Escribe tu código aquí
""
}
# Código de entrada/salida proporcionado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online