(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por funA
.
def funA(n):
if n<10:
return n
elif (n%10)>funA(n//10):
return n%10
else:
return funA(n//10)
A função funA
calcula, para cada número natural n
, o maior dígito da sua representação decimal.
(b) Defina recursivamente em Python uma função fpares que dada uma lista de inteiros w
devolva como resultado a lista dos valores funA(n)
para os elementos n
de w
tais que n
é um número par.
Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]
), acesso aos elementos da lista por posição (lista[posição]
), seccionamento da lista (lista[posição:posição]
) e concatenação (+
).
def fpares(w):
if w==[]:
return []
elif w[0]%2==0:
return [funA(w[0])]+fpares(w[1:])
else:
return fpares(w[1:])
fpares([100,120,43])
(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por funB
.
def funB(n,d):
if n<10:
return n==d
elif (n%10)==d:
return True
else:
return funB(n//10,d)
A função funB
calcula, para cada número natural n
e dígito d
, o predicado que é verdadeiro se e só se o dígito d
ocorre na representação decimal de n
.
(b) Defina recursivamente em Python uma função fquads que dada uma lista de inteiros w
devolva como resultado a lista dos quadrados dos elementos n
de w
para os quais se verifica funB(n,1)
.
Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]
), acesso aos elementos da lista por posição (lista[posição]
), seccionamento da lista (lista[posição:posição]
) e concatenação (+
).
def fquads(w):
if w==[]:
return []
elif funB(w[0],1):
return [w[0]**2]+fquads(w[1:])
else:
return fquads(w[1:])
fquads([1,2,33,101,99])
(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por funC
.
def funC(n):
if n<10:
return n
elif (n%10)<funC(n//10):
return n%10
else:
return funC(n//10)
A função funC
calcula, para cada número natural n
, o menor dígito da sua representação decimal.
(b) Defina recursivamente em Python uma função fmaior5 que dada uma lista de inteiros w
devolva como resultado a lista dos elementos n
de w
para os quais funC(n)
é maior que 5.
Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]
), acesso aos elementos da lista por posição (lista[posição]
), seccionamento da lista (lista[posição:posição]
) e concatenação (+
).
def fmaior5(w):
if w==[]:
return []
elif funC(w[0])>5:
return [w[0]]+fmaior5(w[1:])
else:
return fmaior5(w[1:])
fmaior5([345,26,87,53,696,19])
(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por funD
.
def funD(n):
if n<10:
return True
elif n<100:
return n%10==n//10
else:
return n%10==(n//10)%10 and funD(n//10)
A função funD
calcula, para cada número natural n
, o predicado que é verdadeiro se e só todos os dígitos da representação decimal de n
são iguais.
(b) Defina recursivamente em Python uma função fnot que dada uma lista de inteiros w
devolva como resultado a lista dos elementos n
de w
para os quais não se verifica funD(n)
.
Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]
), acesso aos elementos da lista por posição (lista[posição]
), seccionamento da lista (lista[posição:posição]
) e concatenação (+
).
def fnot(w):
if w==[]:
return []
elif funD(w[0]):
return fnot(w[1:])
else:
return [w[0]]+fnot(w[1:])
fnot([345,999,206,12,8007,53,11])