Sub test_A131407_rec() Dim n As Long, Result As Long For n = 1 To 9 Result = A131407_rec(n) Debug.Print n, Result Next n End Sub Public Function A131407_rec(n As Long) ' Recursive formula. Dim imsgbox As Integer Dim i As Long, j As Long, Summe As Long If n = 0 Then A131407_rec = 0 Exit Function ElseIf n = 1 Then A131407_rec = 1 Exit Function ElseIf n = 2 Then A131407_rec = 2 Exit Function ElseIf n > 2 And n < 13 Then Summe = Bell(n) For j = 2 To n - 1 Summe = Summe + Stirling2(n, j) * A131407_rec(j) Next j Else imsgbox = MsgBox("Illegal input for argument *** n *** !", vbOKOnly, "A131407_rec") End End If A131407_rec = Summe End Function Sub test_A131407_expl() Dim n As Long, Result As Long For n = 1 To 4 Result = A131407_expl(n) Debug.Print n, Result Next n End Sub Public Function A131407_expl(n As Long) Explicit formula. For n =1, 2, 3, 4 only! Dim imsgbox As Integer Dim e As Long, f As Long, g As Long, h As Long, Summe As Long, Summe2 As Long, Summe3 As Long, Summe4 As Long Dim zeile As Integer, spalte As Integer If n = 0 Then A131407_expl = 0 Exit Function ElseIf n = 1 Then A131407_expl = 1 Exit Function ElseIf n = 2 Then A131407_expl = 2 Exit Function ElseIf n > 2 And n < 5 Then Summe = Bell(n) For e = 2 To n - 1 Summe2 = Bell(e) For f = 2 To e - 1 Summe3 = Bell(f) For g = 2 To f - 1 Summe4 = Bell(g) For h = 2 To g - 1 Summe4 = Summe4 + Stirling2(g, h) spalte = spalte + 4 Next h Summe3 = Summe3 + Stirling2(f, g) * Summe4 Next g Summe2 = Summe2 + Stirling2(e, f) * Summe3 Next f zeile = zeile + 1 Summe = Summe + Stirling2(n, e) * Summe2 Next e Else imsgbox = MsgBox("Illegal input for argument *** n *** !", vbOKOnly, "A131407_expl") End End If A131407_expl = Summe End Function Function Bell(n As Long) ' Berechne die Bellschen Zahlen. Dim imsgbox As Integer Dim i As Long If n > 2147483648# Then imsgbox = MsgBox("n needs to be smaller than 2147483648 !", vbOKOnly, "Bell") End End If If (n < 0) Then imsgbox = MsgBox("n needs to be greater than 0 !", vbOKOnly, "Bell") End End If Bell = 0 For i = 1 To n Bell = Bell + Stirling2(n, i) Next i End Function Sub Test_Stirling2() Dim n As Long, k As Long, dummy As Long, dummy2 As Long k = 3 For n = 1 To 10 dummy = Stirling2(n, k) Debug.Print n, k, dummy Next n End Sub Function Stirling2(n As Long, k As Long) ' Berechne die Stirlingschen Zahlen der zweiten Art. Dim i As Long, Summe As Long Summe = 0 For i = 0 To k Summe = Summe + ((-1) ^ i) * binomial(k, i) * (k - i) ^ n Next i Stirling2 = (1 / faculty(k)) * Summe End Function Sub Test_binomial() Dim n As Long, dummy As Long n = 6 dummy = binomial(n, 4) Debug.Print n, dummy End Sub Function binomial(m As Long, n As Long) ' Berechne die Binomialzahlen. Dim Result As Long Result = faculty(m) / (faculty(m - n) * faculty(n)) binomial = Result End Function Function faculty(n As Long) ' Berechne die Fakultat (ohne Rekursion). Dim Result As Long, i As Long Result = 1 For i = 2 To n Result = Result * i Next i faculty = Result End Function