Novo curso! Todo programador deveria aprender IA generativa!
Experimente uma aula grƔtis+ 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.
6 Respostas
+ 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.