Você está na página 1de 11

La recursividad: volver al mismo curso.

Es hacer una estructura repetitiva sin utilizar siclos repetitivos es construir un mdulo que sea capaz de realizar varias veces lo mismo sin utilizar instruccin while instruccin DO instruccin for. Se va a construir mdulos que sean capaces de llamarse as mismo. Modulo Iterativo: nos sirve de las estructura repetitivas for while do son iterativo se refiere a varias veces hacer lo mismo. Equivalente Recursivo: dos mdulos se dicen que son equivalente si cuando las mismas entradas arrojan la misma salida. Criterios de finalizacin: se realiza llamadas sucesivas al mdulo modificando al menos un Parmetro. Todo modulo recursivo necesita: Un criterio de finalizacin Una modificacin en el parmetro de control en la llamada recursiva Que all por lo menos un resultado que no implique la llamada y all un resultado que la implique. Todo lo que se hace recursivo se puede hacer iterativo No todo lo que se hace iterativo se hace recursivo El ms eficiente es el recursivo Caracterstica tpica de la recursividad: No tiene variables locales, porque cada llamada perteneca al dato no tiene for, while, do porque si no ya ser rutinas iterativas se hace llamada as misma y as se logra el efecto del ciclo repetitivo. Cosas iterativas que no pueden hacer recursiva: camino muy sencillo muy elegante Cola circular Una cola circular o anillo es una estructura de datos en la que los elementos estn de forma circular y cada elemento tiene un sucesor y un predecesor. Los elementos pueden consultarse, aadirse y eliminarse nicamente desde la cabeza del anillo que es una posicin distinguida. Existen dos operaciones de rotaciones, una en cada sentido, de manera que la cabeza del anillo pasa a ser el elemento sucesor, o el predecesor, respectivamente, de la cabeza actual. Uso de recursividad: Es entendido como un lujo Por qu? Porque atreves de la recursividad podemos calcular las funciones matemticas ms sencilla y con menos enfoques a equivocarnos en el momento del cdigo y del clculo. Situaciones en la que el uso de la recursividad puede resultar atractivo: Hay tareas de anlisis matemtico que son ms eficiente por un mtodo recursivo ejemplo recorrer un rbol binario iterativo se complica mucho. En cambio hacerlo por recursivo es mucho ms sencillo. Por lo tanto el uso de la recursividad no lleva hacer un cdigo ms claro ms fcil ms en entendible y con menos enfoque al momento de equivocarnos.

Asignacin dinmica de memoria: Es una opcin no es obligante Es cuando el sistema operativo maneja la memoria principal del sistema bajo una poltica RAM es decir que es una memoria de localizacin aleatoria Esa distribucin de los espacio de almacenamiento son criterios de eficiencia. Polticas: mejor encuadre, peor encuadre, la segunda oportunidad Poltica de pagineo: es cuando se ejecuta un programa se saca una copia de una parte del disco duro ejecutable porque es una memoria que es un recurso crtico y finito Crtico: lo necesita toda aplicacin el sistema de computacin Finito: porque se acaba. Estructura asignacin dinmica de memoria: son espacios de almacenamiento que estn sujeto a esta poltica porque van a ser solicitados al sistema operativo al tiempo de ejecucin la idea es que se ejecute con la menor cantidad de memoria principal posible y a medida que va requiriendo ms la va solicitando es un enfoque orientado a la eficiencia. Concurrencia: es la existencia de ms de una aplicacin simultneamente ejecutndose o a la multiprogramacin la posibilidad de que el sistema operativo este simultneamente ejecutando ms de un proceso ejemplo (escuchar msica ver video imprimir etc.) Asignacin memoria dinmica de manda 3 cosas fundamentales: 1) que el sistema operativo lo permita. Hay sistema operativo que no lo permite si debe tener la posibilidad que sea capaz de saber cunta memoria queda disponible en el sistema que sea capaz de permitir la administracin dinmica de memoria tiene que tener la siguientes rutinas cuanto queda ,pida un espacio almacenado, y una rutina con los espacios que no se estn utilizando. que sea Estable 2) Administrar los recursos de la manera ms eficiente 3) Seguridad En todo sistema de computacin hay dos memoria la segundaria y la primaria Primaria (temporal) RAM: una memoria de localizacin aleatoria Cache: es de usos particular no de uso colectivo Virtual: es una porcin del disco duro que el usuario establece que sea administrada como si fuera memoria de almacenamiento temporal. (Cuando se apaga el sistema todo eso se perdi Segundaria (permanente) Disco duro F.D pendrive. ROM= memoria de solo lectura

Estructura de asignacin dinmica de memoria Dos partes: Raz o ancla: Es una estructura de asignacin esttica que permite guardar la direccin de la estructura dinmica. Riesgo de la asignacin dinmica: si el programa se est ejecutando y mi sistema est en ejecucin y se necesita ms memoria y no hay. Asignacin esttica: si no hay memoria suficiente el sistema no dice no hay memoria de entrada. Lista en cadenada: es una estructura que se sirve de asignacin dinmica de memoria para almacenar valores partiendo de cada elemento es un structur donde se almacena por los menos el dato y la direccin del siguiente. Registro pc Se guarda la direccin de la prxima instruccin en ejecutar.

Iterativo Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'DETERMINAR EL MAYOR Y EL MENOR Dim num_1 As Integer = Val(TextBox1.Text) Dim num_2 As Integer = Val(TextBox2.Text) Dim resultado_final As Double If num_1 > num_2 Then resultado_final = multiplicar(num_1, num_2) ElseIf num_1 < num_2 Then resultado_final = multiplicar(num_2, num_1) ElseIf num_1 = num_2 Then Label3.Text = 0 Exit Sub End If Label3.Text = resultado_final End Sub Forma par Public Function multiplicar(ByVal num_max As Integer, ByVal num_min As Integer) As Double Dim valor As Double If num_max - 1 = num_min Then ' NO HAY NUMERO ENTRE ESTE RANGO Return 0 End If num_max -= 1 num_min += 1 si es impar asi = If num_max = num_min And num_max Mod 2 <> 0 Then Return 0 End If > If num_max Mod 2 = 0 Then valor = num_max Else valor = num_max - 1 End If For x As Integer = valor - 1 To num_min Step -1 > If x Mod 2 = 0 And x <> 0 Then valor += x End If Next multiplicar = valor End Function

Suma recursiva da los numero enteros


Public Function sumatoria(ByVal numero1 As Integer, ByVal numero2 As Integer) If (numero2 > 0) Then numero1 = sumatoria(numero1, numero2 - 1) numero1 = numero1 + numero2 Return numero1 Else numero1 = 0 Return numero1 End If End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim numero2 As Integer Dim numero1 As Integer = 0 numero2 = TextBox1.Text numero1 = sumatoria(numero1, numero2) TextBox2.Text = numero1 Label3.Text = numero1 End Sub

Multiplicacin recursivo Public Function mi_multiplicacion(ByVal numero1 As Integer, ByVal numero2 As Integer) As Double Dim cuento As Double = 0 If numero1 > 0 Then mi_multiplicacion = numero2 + mi_multiplicacion(((numero1 - 1)), numero2) Else mi_multiplicacion = 0 End If

Divide iteractivo Public Function divide_R(ByVal numero1 As Integer, ByVal numero2 As Integer) As Double Dim resultado As Double While (numero1 >= numero2) resultado = resultado + 1 numero1 = numero1 - numero2 End While divide_R = resultado End Function

Divide recursivo Public Function divide_R(ByVal dividendo As Integer, ByVal divisor As Integer) As Double If divisor = 0 Then divide_R = -1 Else If dividendo >= divisor Then divide_R = 1 + divide_R(dividendo - divisor, divisor) Else divide_R = 0 End If End If End Function Favtorial recursivo Public Function factorial(ByVal numero1 As Integer) As Double If numero1 > 1 Then factorial = numero1 * factorial(numero1 - 1) Else factorial = 1

End If End Function

Factorial iterativo Public Function factorial(ByVal numero1 As Integer) As Double Dim resultado As Double Dim valor As Integer resultado = 1 valor = numero1 While (valor > 1) resultado = resultado * valor valor = valor - 1 End While factorial = resultado End Function

Cola Public Class cola Const n As Byte = 10 Dim v_valores(n) As Byte Dim inicio As Integer Dim fin As Integer Public Sub inicializar() fin = (-1) inicio = (-1) End Sub Public Function cola_vacia() As Boolean cola_vacia = (fin = (-1))

End Function

Public Function cola_llena() As Boolean cola_llena = (fin = n) And (inicio = 0) End Function

Public Sub agregar_valor(ByVal dato As Integer) If fin = n Then rodar() End If If cola_vacia() = True Then inicio = inicio + 1 End If fin = fin + 1 v_valores(fin) = dato End Sub Public Sub rodar() Dim posicion As Integer For posicion = inicio To fin v_valores(posicion - inicio) = v_valores(posicion) Next fin = fin - inicio inicio = 0 End Sub

Public Function retirar() As Integer

Dim retirado As Integer retirado = v_valores(inicio) If inicio = fin Then inicializar() Else inicio = inicio + 1 End If If inicio > cuanto_hay() Then rodar() End If retirar = retirado End Function Public Function cuanto_hay() As Integer If inicio = (-1) Then cuanto_hay = 0 Else cuanto_hay = fin - inicio + 1 End If End Function

Public Class Form1 Private valores As New cola Private copia_valores As New cola

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim dato As Integer = TextBox1.Text valores.agregar_valor(dato) Label1.Text = valores.cuanto_hay TextBox1.Focus() TextBox1.Text = "" Button2.Enabled = True Button3.Enabled = True End Sub Private Sub bloquear() Button1.Enabled = False Button2.Enabled = False Button3.Enabled = False End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load bloquear() End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click valores.inicializar() Button1.Enabled = True End Sub Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click TextBox1.Text = "" ListBox1.Items.Clear() Label1.Text = "" End Sub Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

End End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim valor_retorno As Integer Dim valor As Integer ListBox1.Items.Clear() Do valor = valores.retirar ListBox1.Items.Add(valor) copia_valores.agregar_valor(valor) Loop Until (valores.cuanto_hay = 0) Do valor_retorno = copia_valores.retirar valores.agregar_valor(valor_retorno) Loop Until (copia_valores.cuanto_hay = 0) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim retirado As Integer retirado = valores.retirar Label2.text = retirado End Sub End Class

Você também pode gostar