CyM98

<< Ejemplo de recurrencia con tabla >>


En la lección Recurencia con tablas se discute como resolver el siguiente problema de manera recursiva. En esta página aparece la versión en Basic.

Se define f(n) como la cantidad de formas distintas en que puede escribirse a n como suma de enteros positivos (sin importar en que orden se sumen, por ejemplo 15 = 7 + 3 + 5 y 15 = 5 + 3 + 7 se consideran la misma forma). Calcular f(120).

La idea es guardar en una tabla los valores que ya se calcularon para no volver a calcularlos otra vez.

Hay que definir una estructura del tipo:

Const True =-1
Const False =0
Type item
        v  As Long
        calculado As Integer 'no hay booleanos pero usando los valores
                             'de True y False definidos arriba
                             'es casi lo mismo
End Type
Dim Tabla(0 To 150, 0 To 150) as item

 

Y agregar un procedimiento para inicializarlo:

Sub initTabla()
    Dim i As Long
    Dim j As Long
    For i = 0 To 150 
        Tabla(i,1).v=1
        Tabla(i,1).calculado=True
    Next i
    For i = 0 To 150
        For j = 2 To 150 
            If j=1 Then Tabla(i,j).calculado=False
        Next j
    Next i
End Sub

 

Ahora G se ve así:

Function G&(n As Long, s As Long)
    'en algunas versiones se puede escribir tambien:
'Function G(n As Long, s As Long) As Long
    If n<0 Then
        G=0
    Else
        If Not Tabla(n,s).calculado Then
            'Si todavía no esta calculado, lo calculo
            Tabla(n,s).v=G(n,s-1)+G(n-s,s)
            Tabla(n,s).calculado=True
        End If
        G=Tabla(n,s).v
    End If
End Function

Lecciones relacionadas:

Recurrencia con tablas (Con la discusión original del problema)


Comentarios, preguntas, sugerencias:

Nombre y apellido (opcional):

E-mail (opcional):

    


OmaNet   Curso CyM98 OmaNet - Educación Interactiva
   
www.oma.org.ar/omanet | omanet@oma.org.ar
mensajes: webmaster@oma.org.ar
duty free alcohol airport duty free cigs uk buy cigars duty free cosmetics duty free prices where to buy perfume buy tobacco duty free