# Exercicio 1.1 def comprimento(lista): return comprimento(lista[1:]) + 1 if lista else 0 # Exercicio 1.2 def soma(lista): return soma(lista[1:]) + lista[0] if lista else 0 # Exercicio 1.3 def existe(lista, elem): return False if not lista else ( True if lista[0] == elem else existe(lista[1:], elem)) # Exercicio 1.4 def concat(l1, l2): return l1 if not l2 else concat(l1 + [l2[0]], l2[1:]) # Exercicio 1.5 def inverte(lista): return [lista[-1]] + inverte(lista[:-1]) if lista else [] # Exercicio 1.6 def capicua(lista): return lista[0] == lista[-1] and capicua(lista[1:-1]) if lista else True # Exercicio 1.7 def concat_listas(lista): return lista[0] + concat_listas(lista[1:]) if lista else [] # Exercicio 1.8 def substitui(lista, original, novo): if not lista: return [] if lista[0] == original: lista[0] = novo return [lista[0]] + substitui(lista[1:], original, novo) # Exercicio 1.9 def fusao_ordenada(lista1, lista2): if not lista1: return lista2 if not lista2: return lista1 if lista1[0] < lista2[0]: return [lista1[0]] + fusao_ordenada(lista1[1:], lista2) return [lista2[0]] + fusao_ordenada(lista1, lista2[1:]) # Exercicio 1.10 def lista_subconjuntos(lista): if not lista: return [[]] return lista_subconjuntos(lista[1:]) + [lista[:1] + x for x in lista_subconjuntos(lista[1:])] # Exercicio 2.1 def separar(lista): if not lista: return ([], []) new_lista = separar(lista[1:]) return ([lista[0][0]] + new_lista[0], [lista[0][1]] + new_lista[1]) # Exercicio 2.2 def remove_e_conta(lista, elem): if not lista: return ([], 0) if lista[0] == elem: new_lista = remove_e_conta(lista[1:], elem) return (new_lista[0], new_lista[1] + 1) new_lista = remove_e_conta(lista[1:], elem) return ([lista[0]] + new_lista[0], new_lista[1]) # Exercicio 3.1 def cabeca(lista): return lista[0] if lista else None # Exercicio 3.2 def cauda(lista): return lista[1:] if lista else [] # Exercicio 3.3 def juntar(l1, l2): if not l1 and not l2: return [] if comprimento(l1) != comprimento(l2): return None jl = juntar(l1[1:], l2[1:]) return [(l1[0], l2[0])] + jl if jl is not None else None # Exercicio 3.4 def menor(lista): if not lista: return None if len(lista) == 1: return lista[0] m = menor(lista[1:]) return lista[0] if lista[0] < m else m # Exercicio 3.6 def max_min(lista): if not lista: return None if len(lista) == 1: return (lista[0], lista[0]) mm = max_min(lista[1:]) return (lista[0] if lista[0] > mm[0] else mm[0], lista[0] if lista[0] < mm[1] else mm[1])