求一个数的阶乘的递归算法?

#include <cstdio>
int factrial(int a)
{
    int i=0;
    if(a==0) return i;
    if(a-1>=0) i=factrial(a-1)*a;
    return i;
}
int main()
{
    int x,y;
    scanf("%d",&x);
    y=factrial(x);
    printf("%d",y);
    return 0;
}

代码如上,输出结果一直为0,求解惑

if(a==1) return 1;
你不能递归到0啊,0乘以任何数都为0,所以你的结果永远是0

factrial(a-1)一直递归到底就是0.

代码如下:

#include <stdio.h>

int factrial(int n)
{
    if(n==1 || n==0)
        return 1;
    else
        return n * factrial(n-1);
}

int main()
{
    int x,y;
    scanf("%d",&x);
    y = factrial(x);
    printf("%d",y);
    return 0;
}