PADRÃO 1: realizar uma operação de redução numérica em uma lista de valores.
[EXEMPLO] Escreva um programa para calcular a soma dos valores de uma lista. Ex: .
Formulação recursiva
Implementação em Javascript
const soma = (lista) => {
if (lista.length == 0) {return 0}
else {
const head = lista[0]
const tail = lista.slice(1)
return (head + soma(tail))
}
}
Versão com uso do já conhecido operador spread para listas.
const soma = (lista) => {
if (lista.length == 0) {return 0}
else {
const [x, ...xs] = lista;
return x + soma(xs)
}
}
Versão com teste acerca de valor indefinido e operador condicional ternário
const soma = ([x, ...xs]) => x === undefined ? 0 : x + soma(xs)
PADRÃO 2: retornar o elemento de uma lista que atenda a um determinado critério.
[EXEMPLO] Encontrar o maior elemento de uma lista.
Formulação recursiva
const maior = ([x,...xs]) => {
if (x === undefined) {return 'Lista vazia'}
else return maiorAux([x,...xs])
}
const maiorAux = ([x,...xs]) => {
if (xs.length == 0) return x
else {
const maior = maiorAux([...xs])
return (x > maior) ? x : maior
}
}
PADRÃO 3: realizar operações sobre elementos de uma lista, gerando uma nova lista.
[EXEMPLO] Inverter a ordem dos elementos de uma lista.
Formulação recursiva
const inverte = ([x, ...xs]) =>
x === undefined ? [] : [...inverte(xs), x]
[EXEMPLO] Duplicar a presença de cada elemento de uma lista.
Formulação recursiva
const duplica = ([x, ...xs]) =>
x === undefined ? [] : [x,x,...duplica(xs)]
PADRÃO 4: verificar se uma lista possui um elemento que atenda a uma dada propriedade/característica.
[EXEMPLO] Verificar se uma lista possui um determinado elemento.
Formulação recursiva
const elem = (e,[x,...xs]) => {
if (x === undefined) {return false}
else return (e===x) || elem(e,[...xs])
}
PADRÃO 5: verificar se a lista atende a uma determinada propriedade.
[EXEMPLO] Testar se uma string consiste num palíndromo.
Formulação recursiva
const palindromo = (str) => {
if (str.length < 2) return true
else {
const primeiro = str.slice(0,1)
const ultimo = str.slice(-1)
const meio = str.slice(1,-1)
return (primeiro===ultimo) && palindromo(meio)
}
}
INTERFACE HTML/CSS para os exemplos