PROGRAM main
integer stirling2;
write (*,*) stirling2(4,2)
END PROGRAM
integer RECURSIVE FUNCTION fak ( n ) RESULT ( erg )
integer n
if (n <= 1) then
erg = 1
return
endif
erg = n * fak ( n-1 )
END FUNCTION
integer RECURSIVE FUNCTION binom ( n, k ) RESULT ( erg )
integer :: n,k, ergebnis, i
if ( k .EQ. 0 ) then
erg = 1
return
else if ( 2*k > n ) then
erg = binom ( n, n-k )
return
endif
ergebnis = n - k + 1
do i=2, k
ergebnis = ergebnis * (n - k + i)
ergebnis = ergebnis / i
enddo
erg = ergebnis
return
END FUNCTION
integer FUNCTION stirling2 ( n, k )
integer :: n,k;
integer :: summe=0;
integer :: j
integer :: fak, binom
do j = 0, k
summe = summe + ((-1)**(k-j)) * binom ( k,j ) * (j**n)
enddo
stirling2 = summe / fak (k)
END FUNCTION