+ 1
Como funciona la recursion
ejemplo factorial del numero 3: int factorial(int n) { if (n==1) { return 1; } else { return n * factorial(n-1); } } ¿que sucede cuando la funcion llega al punto "if"? si n ==1 ¿por que retorna 6?, no entiendo como se mueve el codigo dentro de una recursion, ¿donde se almacenan los datos? ¿pensaba que cuando una funcion llegaba al return se cerraba? soy el tipo de persona que quiere entender como funciona todo de forma completa. Gracias de antemano.
8 Réponses
+ 5
Uhm... Vamos por partes. Primero que nada es una función recursiva, es decir, la función se llama a sí misma de forma indefinidad hasta alcanzar una condición, así que cuando tu función llega a return en este caso tiene un comportamiento diferente (llama nuevamente a la función, o retorna el valor que almacena en memoria)
Pasemos a tu fragmento de código, a ver si puedo hacerlo más claro.
El factorial de un número se define como la producto de todos los enteros menor a él, hasta llegar a uno. Es decir:
5! = 5*4*3*2*1 = 120
Ahora, llevemos esto a la práctica. En la primera llamada a tu función, todo estaría así:
return 5 * factorial(5 - 1)
En la segunda llamada estaría así:
return 20 * factorial(4 - 1)
¿Por qué? Bueno, acá hay una parte que me cuesta explicar y que no creo poder explicar plenamente, pero haré lo mejor que pueda en este punto: el chiste es que sigues llamando la función en ese punto y modificando el valor del parametro para hacer otra llamada, mientras se mantiene el resultado anterior en memoria. Cuando n (el parametro que introduciste) es igual a 1 es cuando realmente se abandonará la función y retornará el resultado de la última llamada a la función, ya que es el caso base que define todo.
+ 9
¿Sabe cómo hacer "handtracing"? :>
int factorial(int n) {
if (n==1) {
return 1;
}
else {
return n * factorial(n-1);
}
}
Para factorial(3):
factorial(3)
3 * factorial(2)
3 * (2 * factorial(1))
3 * (2 * (1))
6
+ 7
Hatsy Rei ¿Trazar con la mano == gracias de antemano (thanks in advance)? lol
+ 7
Mickel I thought it meant "handtracing" or at least "trace with your hand"? Darn it, Google!
+ 4
Perdón si sueno complicado, pero aunque comprendo cómo funcionan las cosas eventualmente me es complicado expresarme de una manera clara, además, a veces me es complicado no mezclar conceptos
+ 2
well, I was not expecting so many help. my english is not as good as I woud like. that is the reason why I asked in spanish. now I have a concept.