Programação Recursiva

Propaganda
02.prog.rec.nb
1
Programação Recursiva
Nos exercícios que se seguem, as únicas funções primitivas sobre listas
que deve utilizar são: First, Last, Rest, Append, Prepend e {}.
Defina recursivamente em Mathematica as funções abaixo descritas.
† somaNat: recebe um número natural n e devolve a soma de todos os naturais até n.
somaNat@6D
21
† quadrados: recebe um número natural n e devolve a lista dos quadrados perfeitos até n.
quadrados@6D
81, 4, 9, 16, 25, 36<
† quadradosinv: recebe um número natural n e devolve a lista dos quadrados perfeitos até n, por ordem
decrescente.
quadradosinv@6D
836, 25, 16, 9, 4, 1<
† prodLista: recebe uma lista de inteiros e devolve o produto dos seus elementos.
prodLista@81, 2, 3, 4<D
24
† contemPrimoQ:recebe uma lista de naturais w e devolve True sse w contém pelo menos um número
primo.
contemPrimoQ@81, 2, 3, 4<D
True
contemPrimoQ@84, 6, 8, 10<D
False
02.prog.rec.nb
† pertenceQ: recebe uma lista de inteiros w e um inteiro k e devolve True sse k ocorre em w.
pertenceQ@83, 4, 5, 6, 7, 5<, 8D
False
pertenceQ@83, 4, 5, 6, 7, 5<, 7D
True
† junta: recebe duas listas e devolve a sua concatenação.
junta@81, 2, 3<, 89, 8, 7<D
81, 2, 3, 9, 8, 7<
† indicesPar: recebe uma lista de inteiros w e devolve a lista dos elementos de w em posições pares.
indicesPar@82, 3, 4, 4, 5<D
83, 4<
† retiraPares: recebe uma lista de inteiros w e devolve a lista dos elementos pares de w.
retiraPares@82, 3, 4, 4, 5<D
82, 4, 4<
† retiraNeg: recebe uma lista de inteiros w e devolve a lista resultante de retirar todos os números
negativos de w.
retiraNeg@83, −2, 1, −7<D
83, 1<
† supremo: recebe uma lista de inteiros e devolve o seu supremo.
(Note que o supremo do conjunto vazio é -¶.)
supremo@8<D
−∞
supremo@81, −3, 6, −27<D
6
† conta: recebe como argumentos uma lista de inteiros w e um inteiro k e devolve o número de vezes que
k ocorre em w.
conta@81, 2, 3, 1, 2, 3<, 2D
2
2
02.prog.rec.nb
3
† lposicoes: recebe como argumentos uma lista de inteiros w e um inteiro k e devolve a lista das posições
em que k ocorre em w.
lposicoes@81, 2, 3, 1, 2, 3<, 2D
82, 5<
† caracteristicaPrimos: recebe uma lista de naturais w e devolve uma lista com True nas posições
onde ocorre em w um número primo e False nas outras.
caracteristicaPrimos@81, 2, 3, 4, 5, 6, 7, 8, 9<D
8False, True, True, False, True, False, True, False, False<
† apaga1: recebe uma lista w e um número inteiro k e devolve a lista que resulta de se apagar de w a
primeira ocorrência de k (caso exista).
apaga1@81, 2, 3, 2, 1, 2<, 1D
82, 3, 2, 1, 2<
† apaga: recebe uma lista w e um número inteiro k e devolve a lista que resulta de se apagar de w todas as
ocorrências de k.
apaga@81, 2, 3, 2, 1, 2<, 1D
82, 3, 2, 2<
† seleccao: recebe uma lista e um predicado e devolve a lista dos elementos que verificam esse predicado.
seleccao@81, 2, 3, 4, 5, 6<, PrimeQD
82, 3, 5<
† mapeia: recebe uma função f e uma lista w e devolve a lista dos resultados de aplicar f aos elementos de
w.
mapeia@Function@x, 2 ^ xD, 83, 5, 7, 8<D
88, 32, 128, 256<
mapeia@Function@x, EvenQ@xDD, 83, 5, 7, 8<D
8False, False, False, True<
† primalg: recebe um inteiro k e devolve o primeiro algarismo de k.
primalg@2D
2
02.prog.rec.nb
4
primalg@6535D
6
† temPrimoQ: dada uma lista de listas de inteiros devolve True sse alguma das suas sublistas tem um
número primo.
temprimoQ@884<, 83<, 81, 4, 6<<D
True
temprimoQ@884<, 88<, 81, 4, 6<<D
False
† inverteLista: recebe uma lista e devolve a mesma lista mas invertida.
Apresente duas soluções para a referida função: uma usando recursão à esquerda e outra usando recursão à
direita.
inverteLista@81, 2, 3, 4<D
84, 3, 2, 1<
† ligualQ: recebe duas listas e devolve True se as listas forem iguais e False caso contrário.
ligualQ@81, 2, 3<, 81, 2, 3<D
True
ligualQ@81, 2, 3<, 82, 1, 3<D
False
Os exercícios seguintes são de um nível de dificuldade mais elevado; caso
considere necessário, utilize algumas das funções acima definidas.
† permutacao: recebe duas listas w1 e w2 e devolve True se w2 for uma permutação de w1 e False
caso contrário.
permutacao@81, 2, 3<, 82, 1, 3<D
True
permutacao@81, 2, 3<, 81, 2, 2, 3<D
False
† intercala: recebe duas listas w1 e w2 e devolve a lista resultante de intercalar os elementos de w1 e w2.
intercala@83, 2, 1<, 85, 6, 7<D
83, 5, 2, 6, 1, 7<
02.prog.rec.nb
intercala@83, 2, 1<, 84<D
83, 4, 2, 1<
intercala@8<, 85, 6, 7<D
85, 6, 7<
† indPrimos: recebe uma lista de listas de inteiros w1={w11,w12,...,w1k} e devolve a lista
w2={w21,w22,...,w2k}, em que w2i é composta pelas posições dos números primos em w1i.
indprimos@881, 2, 3, 4, 5<, 82, 4, 3, 5<, 84, 6, 8, 9<, 8<<D
882, 3, 5<, 81, 3, 4<, 8<, 8<<
† separaMult3e5: recebe uma lista de inteiros w e devolve um par formado por duas listas: a dos
múltiplos de 5 que ocorrem em w e a dos múltiplos de 3 que ocorrem em w.
separaMult3e5@81, 2, 3, 4, 5, 9, 15<D
883, 9, 15<, 85, 15<<
† potencia: recebe um algarismo k (que não zero) e devolve o menor natural n tal que 2^n começa por k.
potencia@2D
2
potencia@3D
6
† repete: recebe uma lista w e devolve uma lista em que o primeiro elemento de w aparece uma vez, o
segundo elemento duas vezes, ... .
repete@8a, b, c<D
8a, b, b, c, c, c<
5
Download