RosettaCodeData/Task/Catalan-numbers/Visual-Basic-.NET/catalan-numbers.vb

75 lines
1.9 KiB
VB.net

Module Module1
Function Factorial(n As Double) As Double
If n < 1 Then
Return 1
End If
Dim result = 1.0
For i = 1 To n
result = result * i
Next
Return result
End Function
Function FirstOption(n As Double) As Double
Return Factorial(2 * n) / (Factorial(n + 1) * Factorial(n))
End Function
Function SecondOption(n As Double) As Double
If n = 0 Then
Return 1
End If
Dim sum = 0
For i = 0 To n - 1
sum = sum + SecondOption(i) * SecondOption((n - 1) - i)
Next
Return sum
End Function
Function ThirdOption(n As Double) As Double
If n = 0 Then
Return 1
End If
Return ((2 * (2 * n - 1)) / (n + 1)) * ThirdOption(n - 1)
End Function
Sub Main()
Const MaxCatalanNumber = 15
Dim initial As DateTime
Dim final As DateTime
Dim ts As TimeSpan
initial = DateTime.Now
For i = 0 To MaxCatalanNumber
Console.WriteLine("CatalanNumber({0}:{1})", i, FirstOption(i))
Next
final = DateTime.Now
ts = final - initial
Console.WriteLine("It took {0}.{1} to execute", ts.Seconds, ts.Milliseconds)
Console.WriteLine()
initial = DateTime.Now
For i = 0 To MaxCatalanNumber
Console.WriteLine("CatalanNumber({0}:{1})", i, SecondOption(i))
Next
final = DateTime.Now
ts = final - initial
Console.WriteLine("It took {0}.{1} to execute", ts.Seconds, ts.Milliseconds)
Console.WriteLine()
initial = DateTime.Now
For i = 0 To MaxCatalanNumber
Console.WriteLine("CatalanNumber({0}:{1})", i, ThirdOption(i))
Next
final = DateTime.Now
ts = final - initial
Console.WriteLine("It took {0}.{1} to execute", ts.Seconds, ts.Milliseconds)
End Sub
End Module