Caracteres válidos en una cadena

Me dan una cadena y tengo que devolver False si hay uno o más caracteres no válidos, de lo contrario, True. La advertencia es que solo puedo incorporar funciones y operaciones str (por ejemplo: in, +, indexing, len) y recursión. Lo que tengo hasta ahora no funciona:

def is_valid_sequence(dna):
""" (str) -> bool

Return True if and only if the DNA sequence is valid
(A, T, C, and G)
:param dna: string sequence
:return: true or false
>>> is_valid_sequence('ATTAC')
True
>>> is_valid_sequence('FBSSS')
False
"""
valid_seq = 0

if len(dna) == 1 and dna in ['A', 'T', 'C', 'G']:
        valid_seq += 1
else:
    return is_valid_sequence(dna[1:])

Obviamente, este código no funciona debido a la recursividad y al agregar 1 alvalid_seq La variable simplemente se borra después de la siguiente iteración recursiva.

Respuestas a la pregunta(2)

Su respuesta a la pregunta