Sei sulla pagina 1di 15

FUNCIONES RECURSIVAS EN VISUAL BASIC 2005

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:

EJERCICIO 1

EJERCICIO 2

EJERCICIO 3

EJERCICIO 4
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.
Jaime Montoya
webmaster@jaimemontoya.com
www.jaimemontoya.com
Santa Ana, 5 de febrero de 2008
El Salvador

Potrebbero piacerti anche