![]() |
<< 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)
| OmaNet - Educación Interactiva www.oma.org.ar/omanet | omanet@oma.org.ar |
|
| mensajes: webmaster@oma.org.ar |