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] 64A 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] 8next 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 21Desafio
FácilComplete 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")
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
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online