Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre funciones recursivas.

Anuncios

Pero que es una funcion recursiva?

Podemos considerar que es una funcion que se llama a si misma hasta que una condicion es alcanzada

El Tinchicus
Anuncios

Por esta razon hay muchas personas que la pueden considerar como un tipo de bucle aunque no deja de ser una forma antigua de tener uno, que sea antigua no quita que pueda resultarnos mas practica que alguno de los bucles vistos anteriormente, veamos un ejemplo de funcion recursiva en un lenguaje de tipo OOP:

int mi_funcion(int a)
{
	// manejamos a la variable a
	if (a != 32)
	{
		mi_funcion(a);
	}
	else
	{
		return a;
	}
}
Anuncios

Observen que tenemos una funcion donde recibimos un valor en el argumento a, lo procesamos con algunas instrucciones pero tenemos un condicional donde verificamos que a es distinto de 32, si se cumple la condicion hacemos que se vuelva a llamar, esta es la recursion, en caso contrario procedemos a salir de la funcion devolviendo el valor de a, este es el concepto basico de una funcion recursiva pero vamos a verlo en accion mediante un simple ejemplo.

Anuncios

Para ello crearemos un nuevo proyecto que llamaremos recursion, una vez creado modificaremos el codigo generado en main.rs con el siguiente:

main.rs

fn recursivo(n: i32)
{
	let mut v: i32 = 0;

	if n % 2 == 0
	{
		v = n / 2;
	}
	else
	{
		v = 3 * n + 1;
	}

	println!("{}", v);

	if v != 1
	{
		recursivo(v)
	}
}

fn main() 
{
	recursivo(12)
}
Anuncios
Anuncios

Aqui tenemos un codigo simple donde primero definiremos una funcion que se llama recursiva y esta recibe un valor de tipo int de 32 bits, dentro primero definiremos una variable llamada v tambien de tipo int de 32 bits con un valor de 0, luego tenemos un condicional donde verificamos si el modulo de la division del valor informado por dos es igual a cero, en caso de ser verdadero estableceremos el valor de v con el resultado de la division de n por dos, de lo contrario le pasaremos el valor de la ecuacion que le asignamos, luego mostraremos el valor actual de v, lo siguiente sera un condicional donde verifica si v es distinto de uno, en caso de ser verdadero se vuelve a llamar a si mismo.

Anuncios

Lo siguiente sera la funcion main donde llamaremos a la funcion anterior y le informaremos un valor para que realice todas las operaciones anteriores, si lo compilamos nos devolvera un aviso pero igualmente funcionara, veamos como es su salida:

warning: `recursion` (bin "recursion") generated 1 warning
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/recursion`
6
3
10
5
16
8
4
2
1
tinchicus@dbn001vrt:~/lenguajes/rust/recursion$
Anuncios

Observen como fue manejandolo hasta que finalmente el valor de v fue de 1, por lo tanto salio de la recursion y termino saliendo del programa, si observaron un par de detalles, en algunas secciones del codigo no finalizamos la linea con el punto y coma pero igualmente funciono, esto es debido a que tiene una explicacion pero de esta hablaremos en el proximo post.

Anuncios

En resumen, hoy hemos visto el concepto de funciones recursivas en Rust, si bien hemos visto primero como es el concepto en un orden general, despues por medio de un ejemplo simple hemos visto como se crea, como es la condicion para hacerlo de esta forma, tambien hemos visto como llamarlo desde nuestra funcion principal y por ultimo hemos mencionado un tema que veremos proximamente, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50