我这样写问题出在哪里?


int mul(int n)
{
    int x = 1;
    if(x<=n)
        return x*mul(x+1);
    else
        return 1;
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    int ret = mul(n);    
    printf("%d\n",ret);
    return 0;
}

我这样写为什么得不到我想要的阶乘,而我这样写


int mul(int n)
{
    /*int x = 1;
    if(x<=n)
        return x*mul(x+1);
    else
        return 1;*/
    if(n>=1)
        return n*mul(n-1);    
    else
        return 1;
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    int ret = mul(n);    
    printf("%d\n",ret);
    return 0;
}

为什么这样写又可以的出我想要的阶乘?

第一段:不管你输入多少,调用函数时递归,传入函数的参数都会越来越大,因此得不到;

这是一种递归的写法,递归的要求就是必须要有终止条件

int mul(int n)
{
    int x = 1;
    if(x<=n)
        return x*mul(x+1);
    else
        return 1;

你这样写是没有终止条件的,比如当传过来的n是2的时候,x=1,小于2,然后执行1*mul(2),相当于又调用mul方法,并且n的值为2,相当于进入死循环了