Função recursiva

LordGun

Membro
Boa tarde a todos.

Estou a estudar Python pela primeira vez e entrei agora nas funções recursivas.

Gostava de saber se alguém me podia ajudar no seguinte exercício:

Escreva a função recursiva uniao(tup1, tup2), que recebe dois tuplos e devolve um tuplo com os elementos de tup1 seguidos dos elementos de tup2 que não pertencem a tup1. O tuplo resultado deve apresentar os elementos pela mesma ordem em que aparecem nos tuplos tup1 e tup2.
Assuma que os tuplos recebidos não têm valores duplicados.

Por exemplo,
>>> uniao((3,1,'a'), (2, 'b', 'c', 1))

(3, 1, 'a', 2, 'b', 'c')

Eu consegui por o código funcional, mas, no entanto, não consegui fazer através de uma função recursiva. Alguém me pode ajudar de como eu devo transformar o codigo em baixo em recursividade?

Código que fiz:

def uniao(tup1, tup2):

lst = []
for i in tup1 + tup2:
if i not in lst:
lst.append(i)
return lst



Obrigado!
 
Viva,

o algoritmo poderá ser algo do género:

função uniao(tup1, tup2)
{
se tup2 não tiver elementos, então retorna;
verificar se o primeiro elemento do tup2 está em tup1;
se não estiver, adicionar a tup1 e remover de tup2;
chamar novamente a função;
}
 
Viva,

o algoritmo poderá ser algo do género:

função uniao(tup1, tup2)
{
se tup2 não tiver elementos, então retorna;
verificar se o primeiro elemento do tup2 está em tup1;
se não estiver, adicionar a tup1 e remover de tup2;
chamar novamente a função;
}
Boas,
Só uma correcção:

função uniao(tup1, tup2)
{
se tup2 não tiver elementos, então retorna tup1;
verificar se o primeiro elemento do tup2 está em tup1;
se não estiver, adicionar a tup1 e remover de tup2;
chamar novamente a função;
}
 
def uniao(tup1, tup2):

lst = []
for i in tup1 + tup2:
if i not in lst:
lst.append(i)
return lst

isto não só não é recursivo como não é eficiente. Se o propósito é devolver a lista de elementos do tup1 mais os do tup2 que não existam no tup1, porque é que estás a percorrer os elementos do tup1?

Fora isso recursivamente a ideia é teres uma função que faz algo do género:

def uniao (tup1, tup2):
if !tup1:
return tup2
elif !tup2:
return tup1
else:
if tup2[0] not in tup1:
tup1.append(tup2[0])
return uniao(tup1,tup2[1:])
else:
return uniao(tup1,tup2[1:])

Já não programo Python há algum tempo, pode haver ainda uma forma melhor de fazer isto, mas a ideia da recursividade é sempre ires lendo elemento a elemento do tup2 e repetires a função passando só a cauda do tup2.

EDIT: Logicamente cuidado com a identação, o forum aqui puxa o texto todo para a esquerda.
 
Back
Topo