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,相当于进入死循环了