Menu
Coddy logo textTech

repeat y break

Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 49 de 64.

repeat ejecuta su cuerpo una y otra vez hasta que un break dentro de él detiene el bucle. Es adecuado para un bucle cuya condición de salida solo se conoce en medio del cuerpo:

n <- 1
repeat {
  n <- n * 2
  if (n > 50) break
}
print(n)

Salida:

[1] 64

La secuencia de Collatz es un ejemplo: divide los números pares entre dos, convierte los impares en 3n + 1 y detente en 1. El número de pasos no se conoce de antemano:

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)

Salida:

[1] 8

next omite el resto de la iteración actual y comienza la siguiente. Funciona en los bucles repeat, while y for:

for (x in 1:8) {
  if (x %% 3 == 0) next
  cat(x, "")
}
cat("\n")

Salida:

1 2 4 5 7 8 

Un bucle repeat sin un break alcanzable nunca termina. Mantén un contador como límite de seguridad cuando la salida dependa de los datos:

total <- 0
tries <- 0
repeat {
  tries <- tries + 1
  total <- total + tries
  if (total >= 20 || tries == 100) break
}
print(c(tries, total))

Salida:

[1]  6 21
challenge icon

Desafío

Fácil

Completa digital_root(n). Reemplaza n por la suma de sus dígitos hasta que quede un solo dígito y devuelve <result> after <steps> steps: 9875 da 2 after 3 steps (9875, 29, 11, 2). Un número que ya tiene un solo dígito requiere 0 pasos.

sum(as.numeric(strsplit(as.character(n), "")[[1]])) suma los dígitos de n.

El código proporcionado lee n e imprime el valor devuelto.

Pruébalo tú mismo

digital_root <- function(n) {
  # Escribe tu código aquí
  ""
}

# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de R online