Como funciona la recursion | Sololearn: Learn to code for FREE!
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.

21st Jun 2018, 3:04 AM
Link Skwor
Link Skwor - avatar
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.
21st Jun 2018, 4:29 AM
Mickel
Mickel - avatar
+ 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
21st Jun 2018, 4:49 AM
Hatsy Rei
Hatsy Rei - avatar
+ 7
Hatsy Rei ĀæTrazar con la mano == gracias de antemano (thanks in advance)? lol
21st Jun 2018, 4:51 AM
Mickel
Mickel - avatar
+ 7
Mickel I thought it meant "handtracing" or at least "trace with your hand"? Darn it, Google!
21st Jun 2018, 4:53 AM
Hatsy Rei
Hatsy Rei - avatar
+ 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
21st Jun 2018, 4:32 AM
Mickel
Mickel - avatar
+ 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.
21st Jun 2018, 11:37 AM
Link Skwor
Link Skwor - avatar