Cláudio Posted December 5, 2019 at 06:14 PM Report Share #616787 Posted December 5, 2019 at 06:14 PM 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! Link to comment Share on other sites More sharing options...
pedropregueiro Posted December 9, 2019 at 10:46 AM Report Share #616807 Posted December 9, 2019 at 10:46 AM Olá @Cláudio, Para transformares o teu código numa função recursiva, tens de mudar um pouco a forma como pensas no problema. Uma função recursiva é, basicamente, uma função que se chama a si mesma durante a execução do código. Para além disso, pelo menos um dos teus parâmetros tem de ser alterado de forma à função, a certa altura, terminar. Bom, teoria à parte, tens 2 tuplos que tens de juntar. Um dos tuplos - tup1 - é, digamos, o teu tuplo base. E o outro tuplo é o que tens de iterar sobre, para adicionar elementos ao tuplo base. Tu resolveste o teu problema iterativamente, mas duma forma que dificulta a conversão para uma função recursiva. Vê esta alternative duma função iterativa para o teu problema: def iter_uniao(tup1, tup2): tup1 = list(tup1) for elem in tup2: if elem not in tup1: tup1.append(elem) return tuple(tup1) assert iter_uniao((3, 1, "a"), (2, "b", "c", 1)) == (3, 1, "a", 2, "b", "c") assert iter_uniao((1, 2), (2, 3)) == (1, 2, 3) Olhando para esta função acima, converter para uma função recursiva é capaz de ser um pouco mais simples do que o que tinhas antes. Só precisas de 2 coisas para o fazer: Decidir o caso de paragem (quando a função deve terminar/retornar) Decidir o que é que altera cada vez que chamas recursivamente a função Vê se consegues resolver agora 😉. Se precisares de rever alguma teoria, aqui tens um bom artigo sobre o assunto: https://realpython.com/python-thinking-recursively/ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now