递归求n! 哪个地方错了

#include "StdAfx.h"
#include
int f(int )

{
int n;

printf("please input number n:\n");
scanf("%d",&n);
if (n==1||n==0)
return 1;
else
return n*f(n-1);
}

把printf拿出来,单独写,别放到递归里。
然后f函数改成如下
int f(int n)
{
scanf("%d",&n);
if (n==1||n==0)
return 1;
else
return n*f(n-1);
}

 #include "StdAfx.h"
#include <stdio.h>
int f(int n)
{
    if (n==1||n==0) 
        return  1;
    else 
    return n*f(n-1);
}
int main()
{
    int n;                              
    printf("please input  number n:\n");
    scanf("%d",&n);
    int r = f(n);
        printf("%d", r);
        return 0;
}