Najprawdopodobniej dane które podajesz są zbyt małe, aby wymagały konkretnego czasu. Przykładowo, kiedy testowałem twój kod, to u mnie podanie wartości większej niż 14 powodowało wyjście poza zakres zmiennej long int. Kiedy zmieniłem deklarację obu funkcji na unsigned long long dla wartości 30 uzyskałem satysfakcjonujący wynik - różny od zera.
Oto fragment kodu, który zmieniłem:
unsigned long long silnia( int n )
{
if( n == 0 ) return 1;
else return n * silnia ( n - 1 );
};
unsigned long long s ( int m )
{
long long wynik = 1;
for( int i = 1; i <= m; i++ )
wynik *= i;
return wynik;
};
A tutaj output: