Estaba leyendo las respuestas que obtuvieron una insignia de "anulación" y encontré una pregunta con respecto a la recursión donde la OP no se molestó en hacer gran parte de su tarea desde el principio. Además de algunas respuestas realmente divertidas, @machielo publicó an answer en python que tuve que ejecutar en mi máquina para controlarlo. Todavía no lo entiendo.No entiendo este uso de la recursión
def recursive(x):
if x > 10:
print recursive(x/10)
return x%10
>>> recursive(2678)
2
6
7
8
probé mi primera suposición, pero sé que está mal
>>> 2678/10
267
>>> 267/10
26
>>> 26/10
2
>>> 2%10
2
bien ... eso es los dos. ¿Cómo evalúa esto la salida de los otros números en x
?
EDITAR
Es la declaración de print
que no consigo aquí. He modificado el código como tal:
>>> def recursive(x):
if x > 10:
print x
print recursive(x/10)
return x%10
>>> #I will comment the interpreter session here...
>>> recursive(2345)
2345 # first feed in...print the raw number `x`
234 # 2345/10 does equal 234...the 5 is being held back somewhere...
23 # and each pass through the recursive loop removes the last digit...
2 # but where was it being stored at, so that each evaluation of
3 # x > 10 finally started returning False
4 # and returns the number, exiting the function
5 # ...
Estoy pensando que durante cada ejecutar a través de la llamada a print recursive(x/10)
crea un nuevo objeto de función, cada uno con su propio nuevo caso base de la marca y de entrada ...
Otra pista, ¿alguien?
FINALMENTE
Gracias a todos. Siento que entiendo esto ahora ... el truco no fue tanto print
como lo fue x%10
. 2345%10 == 5
...
>>> def recursive(x):
print "Raw `x`:", x
if x > 10:
print "Recurse `x`:", x
print recursive(x/10)
print "Last `x`:", x
return x%10
>>> recursive(2345)
Raw `x`: 2345
Recurse `x`: 2345
Raw `x`: 234
Recurse `x`: 234
Raw `x`: 23
Recurse `x`: 23
Raw `x`: 2
Last `x`: 2
2
Last `x`: 23
3
Last `x`: 234
4
Last `x`: 2345
5
Además, el crédito a todo el que entraba y actualizada la respuesta inicial que I previously linked to ... Estoy a punto de upvote su comentario:
>>> def recursive(x):
if x >= 10:
print recursive(x/10)
return x%10
Creo que no entiendo totalmente la pregunta. ¿Qué quieres decir con "cada número en' x' "? –
No quiero enturbiar mi pregunta con todas mis malas suposiciones ** pero ** ... al reemplazar 'print recursive (x/10)' con 'return recursive (x/10)' empujará el caso base hacia el primer pase de recursión. – Droogans
su ejemplo no produce esa salida para mí – joaquin