You could further instrument teh code to illustrate the descent and asscent of the recursion:

Code:
int fact(int n)
{
    int f, r;
    r_count++ ;
    r = r_count ;
    printf( "%d: Enter fact(%d)\n", r, n ) ;

    if(n==1||n==0)
    {
        printf( "%d: fact(%d) = 1\n", r, n ) ;
        printf( "%d: Exit fact(%d)\n", r, n ) ;
        return 1;
    }
    f=n*fact(n-1);

    printf( "%d: fact(%d) = %d\n", r, n, f ) ;
    printf( "%d: Exit fact(%d)\n", r, n ) ;
    return f;
}
Which outputs:
Code:
1: Enter fact(4)
2: Enter fact(3)
3: Enter fact(2)
4: Enter fact(1)
4: fact(1) = 1
4: Exit fact(1)
3: fact(2) = 2
3: Exit fact(2)
2: fact(3) = 6
2: Exit fact(3)
1: fact(4) = 24
1: Exit fact(4)
24
However my point about using your debugger was exactly so you don't have to waste time instrumenting the code in that way. You really should learn to use your debugger.