DESARROLLO
A continuación se muestra un programa desarrollado en Visual Basic 2005 que
utiliza funciones recursivas para resolver ejercicios comunes de programación.
EJERCICIOS
Utilizar funciones recursivas para resolver los siguientes ejercicios:

FORMULARIO DE INICIO

a^n RECURSIVAMENTE

FIBONACCI RECURSIVAMENTE

MCD RECURSIVAMENTE

MCD RECURSIVAMENTE

COMBINATORIO RECURSIVAMENTE

CÓDIGO DEL PROGRAMA
(MÓDULO DE LAS FUNCIONES
RECURSIVAS)
Module
Module1
Public Function
potencia(ByVal a As
Integer, ByVal
n As Integer)
As Integer
'Esta función recursiva es para
calcular el resultado de a^n.
If n = 0 Then
'Todo número elevado a la 0 da
como resultado 1.
Return
1
Else
Return a * potencia(a, n - 1)
'Aplicando recursividad.
End
If
End
Function
Public
Function combinatorio(ByVal
n As Integer,
ByVal r As
Integer) As
Integer
'Esta función recursiva es para calcular el combinatorio, por
ejemplo "8C3=56", que significa que 8 elementos tomando 3 a la vez da un
combinatorio de 56 posibilidades.
If
(r = 0) Or (r = n)
Then
Return 1
Else
If (r = 1)
Then
Return n
Else
Return
combinatorio(n - 1, r) + combinatorio(n - 1, r - 1)
'Aplicando recursividad.
End
If
End
If
End
Function
Public
Function fibonacci(ByVal
numero As Integer)
As Integer
'Esta función recursiva es para
calcular el fibonacci de un número dado.
If
(numero = 0) Or (numero = 1)
Then
Return 1
Else
Return fibonacci(numero - 1) + fibonacci(numero
- 2) 'Aplicando recursividad.
End
If
End
Function
Public Function
mcd(ByVal numero1 As
Integer, ByVal
numero2 As Integer)
As
Integer
If (numero2 = 0)
Then
Return numero1
Else
Return
mcd(numero2, numero1 Mod numero2)
'Aplicando recursividad.
End
If
End
Function
End
Module
(FORMULARIO DE INICIO)
Public
Class Form1
Private Sub
an_Click(ByVal sender
As System.Object, ByVal e
As System.EventArgs)
Handles an.Click
an1.Show()
'Mostrar el formulario "an".
Me.Hide()
'Ocultar el formulario actual.
End
Sub
Private
Sub fibonacci_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles fibonacci.Click
Me.Hide()
'Ocultar el formulario actual.
fibonacci1.Show() 'Mostrar el
formulario "fibonacci".
End
Sub
Private Sub
mcd_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles mcd.Click
Me.Hide()
'Ocultar el formulario actual.
mcd1.Show()
'Mostrar el formulario "mcd".
End
Sub
Private Sub
combinatorio_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles combinatorio.Click
Me.Hide()
'Ocultar el formulario actual.
combinatorio1.Show() 'Mostrar
el formulario "combinatorio".
End
Sub
End
Class
(FORMULARIO DE a^n)
Public
Class an1
Private Sub
menu_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles menu.Click
Form1.Show()
'Mostrar el formulario "Form1".
Me.Hide()
'Ocultar el formulario actual.
End
Sub
Private Sub
TextBox1_KeyPress(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox1.KeyPress
If
(Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57)
Or (Asc(e.KeyChar) = 8)
Then
'Los únicos caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al 57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada para que no se puedan introducir caracteres inválidos.
End
If
End
Sub
Private Sub
TextBox2_KeyPress(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox2.KeyPress
If
(Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57)
Or (Asc(e.KeyChar) = 8)
Then
'Los únicos caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al 57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada para que no se puedan introducir caracteres inválidos.
End
If
End
Sub
Private Sub
Button1_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles Button1.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End
Sub
Private Sub
calcular_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles calcular.Click
TextBox3.Text
= ""
'Para que limpie el resultado de procesos anteriores.
If
(TextBox1.Text = "")
Or (TextBox2.Text =
"")
Then
MsgBox("Escriba
los valores de a y n.", MsgBoxStyle.Exclamation,
"Funciones Recursivas")
Else
If (TextBox1.Text =
"0") And (TextBox2.Text
= "0") Then
'Es como querer elevar 0^0, que
produce error.
MsgBox("0^0 produce error. Favor verificar los
valores introducidos.", MsgBoxStyle.Exclamation,
"Funciones Recursivas")
Else
TextBox3.Text = potencia(TextBox1.Text, TextBox2.Text)
End
If
End
If
End
Sub
End
Class
(FORMULARIO COMBINATORIO)
Public
Class combinatorio1
Private Sub
menu_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles menu.Click
Form1.Show()
'Mostrar el formulario "Form1".
Me.Hide()
'Ocultar el formulario actual.
End
Sub
Private Sub
TextBox1_KeyPress(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox1.KeyPress
If
(Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57)
Or (Asc(e.KeyChar) = 8)
Then
'Los únicos caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al 57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada para que no se puedan introducir caracteres inválidos.
End
If
End
Sub
Private Sub
TextBox2_KeyPress(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox2.KeyPress
If
(Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57)
Or (Asc(e.KeyChar) = 8)
Then
'Los únicos caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al 57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada para que no se puedan introducir caracteres inválidos.
End
If
End
Sub
Private Sub
Button1_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles Button1.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End
Sub
Private Sub
calcular_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles calcular.Click
TextBox3.Text
= ""
'Para que limpie el resultado de procesos anteriores.
If
(TextBox1.Text = "")
Or (TextBox2.Text =
"")
Then
MsgBox("Escriba
los valores de n y r.", MsgBoxStyle.Exclamation,
"Funciones Recursivas")
Else
If (Val(TextBox2.Text) > Val(TextBox1.Text))
Then
'El valor de r no puede ser mayor que el valor de n porque no se
puede decir "8C9", pues eso devuelve error, no se puede tener 8 elementos y
tomar 9 a la vez.
MsgBox("El valor de r no puede ser mayor que el
valor de n.", MsgBoxStyle.Exclamation,
"Funciones Recursivas")
Else
TextBox3.Text = combinatorio(TextBox1.Text, TextBox2.Text)
End
If
End
If
End
Sub
End
Class
(FORMULARIO FIBONACCI)
Public
Class fibonacci1
Private Sub
menu_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles menu.Click
Form1.Show()
'Mostrar el formulario "Form1".
Me.Hide()
'Ocultar el formulario actual.
End
Sub
Private Sub
TextBox1_KeyPress(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox1.KeyPress
If
(Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57)
Or (Asc(e.KeyChar) = 8)
Then
'Los únicos caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al 57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada para que no se puedan introducir caracteres inválidos.
End
If
End
Sub
Private Sub
Button1_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles Button1.Click
TextBox1.Text = ""
TextBox3.Text = ""
End
Sub
Private
Sub calcular_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles calcular.Click
TextBox3.Text
= ""
'Para que limpie el resultado de procesos anteriores.
If (TextBox1.Text =
"")
Then
MsgBox("Escriba
el valor del número a evaluar.", MsgBoxStyle.Exclamation,
"Funciones Recursivas")
Else
TextBox3.Text = fibonacci(TextBox1.Text)
End
If
End
Sub
End
Class
(FORMULARIO MÁXIMO COMÚN
DIVISOR)
Public
Class mcd1
Private Sub
menu_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles menu.Click
Form1.Show()
'Mostrar el formulario "Form1".
Me.Hide()
'Ocultar el formulario actual.
End
Sub
Private Sub
TextBox1_KeyPress(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox1.KeyPress
If
(Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57)
Or (Asc(e.KeyChar) = 8)
Then
'Los únicos caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al 57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada para que no se puedan introducir caracteres inválidos.
End
If
End
Sub
Private Sub
TextBox2_KeyPress(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
TextBox2.KeyPress
If
(Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57)
Or (Asc(e.KeyChar) = 8)
Then
'Los únicos caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al 57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el
valor de nada para que no se puedan introducir caracteres inválidos.
End
If
End
Sub
Private Sub
Button1_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles Button1.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End
Sub
Private Sub
calcular_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles calcular.Click
TextBox3.Text
= ""
'Para que limpie el resultado de procesos anteriores.
If
(TextBox1.Text = "")
Or (TextBox2.Text =
"")
Then
MsgBox("Escriba
los valores de los números a evaluar.", MsgBoxStyle.Exclamation,
"Funciones Recursivas")
Else
If (Val(TextBox2.Text) > Val(TextBox1.Text))
Then
'El número mayor es el que debe recibir la función como primer
parámetro.
TextBox3.Text = mcd(TextBox2.Text, TextBox1.Text)
Else
'En caso que los valores del
TextBox1 y TextBox2 sean iguales o que el TextBox1 tiene el número mayor, se la
da como primer parámetro de la función el TextBox1.
TextBox3.Text
= mcd(TextBox1.Text, TextBox2.Text)
End
If
End
If
End
Sub
End
Class
CONCLUSIÓN
Como se puede observar, las funciones recursivas permiten realizar interesantes
y útiles operaciones con unas pocas líneas de código. Programar recursivamente
ofrece excelentes beneficios, especialmente en cuanto al ahorro de código para
tener una programación ordenada y simplificada sin necesidad de utilizar tantas
variables ni complicar la programación de aplicaciones.
Descárgate el archivo
aquí
AUTOR
Jaime Montoya
webmaster@jaimemontoya.com
www.jaimemontoya.com
Santa Ana, 5 de febrero de 2008
El Salvador