Menu
Coddy logo textTech

repeat e break

Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 49 de 64.

repeat executa seu corpo repetidamente até que um break dentro dele interrompa o loop. Ele é adequado para um loop cuja condição de saída só é conhecida no meio do corpo:

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

Saída:

[1] 64

A sequência de Collatz é um exemplo: divida os números pares pela metade, transforme os ímpares em 3n + 1 e pare em 1. O número de etapas não é conhecido antecipadamente:

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)

Saída:

[1] 8

next ignora o restante da iteração atual e inicia a próxima. Ele funciona em loops repeat, while e for:

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

Saída:

1 2 4 5 7 8 

Um loop repeat sem um break alcançável nunca termina. Mantenha um contador como limite de segurança quando a saída depender dos dados:

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

Saída:

[1]  6 21
challenge icon

Desafio

Fácil

Complete digital_root(n). Substitua n pela soma de seus dígitos até restar um dígito e retorne <result> after <steps> steps: 9875 resulta em 2 after 3 steps (9875, 29, 11, 2). Um número que já tem um dígito requer 0 etapas.

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

O código fornecido lê n e imprime o valor retornado.

Experimente você mesmo

digital_root <- function(n) {
  # Escreva seu código aqui
  ""
}

# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de R online