Ha encontrado una máquina que, cuando se alimenta con dos números sye, produce un código extraño que consta de las letras ay b. La máquina parece estar usando el siguiente algoritmo.
- Verifique si s es menor que e - 1. Si es así, continúe con el paso 2. Si no, salga.
- Incrementar s en 1
- Disminuya e por 1
- Si esta es la primera letra que está produciendo, produzca a. De lo contrario, produzca una letra diferente de la que produjo por última vez (solo se pueden producir ayb)
- vaya al paso 1.
Mira a continuación lo que probé
def strangeCode(s, e):
output = ""
if s < e-1:
s = s+1
e = e-1
if len(output) % 2:
output = output+"b"
else:
output = output+"a"
return strangeCode(s,e)
return output
Según tengo entendido, cuando devuelvo el código extraño (s, e), mi salida se convierte nuevamente en una cadena vacía, y aquí es donde estoy atascado.
Ejemplos de entradas y salidas son
Entrada: s: 4 e: 8
Salida: "ab"
3 respuestas
Es posible que desee pasar la salida como parámetro en cada iteración recursiva como esta:
def strangeCode(s, e, output=""):
if s < e - 1:
s = s + 1
e = e - 1
if len(output) % 2:
output = output + "b"
else:
output = output + "a"
return strangeCode(s, e, output)
return output
Así que eso
print(strangeCode(4, 10))
Salida esto:
aba
Nota IMPORTANTE
Python no optimiza la recursividad de la cola (compruebe esto) , siempre debes hacer algoritmos iterativos. Esta es una solución alternativa:
def strangeCodeIterative(s, e):
output = ""
while(True):
if s > e - 1:
break
s = s + 1
e = e - 1
if len(output) % 2:
output = output + "b"
else:
output = output + "a"
return output
output = ""
está reinicializando la variable output
en cada llamada a función, por lo que len (output) siempre se evaluará a 0. Creo que, con su enfoque, debe entregar la salida como un parámetro para la llamada a la función como strangeCode(s,e,output)
y elimine el output = ""
Está utilizando un enfoque funcional ya que ha elegido la recursión sobre la iteración. En la programación funcional, la siguiente solución se llama recursión de cola.
def strangeCode(s, e, output = ""):
if s < e-1:
s = s+1
e = e-1
if len(output) % 2:
output = output+"b"
else:
output = output+"a"
return strangeCode(s,e,output)
return output
strangeCode(4,8,output = "")
En caso de que solo necesite estrictamente "s" y "e" como argumentos, puede usar un contenedor de funciones:
def strangeCode(s, e):
def _inner(s,e,output=""):
if s < e-1:
s = s+1
e=e-1
if len(output) % 2:
output = output+"b"
else:
output = output+"a"
return _inner(s,e,output=output)
return output
return _inner(s,e,output="")
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.