以下代码的输出为 5 以及如何修改代码以通过返回获得实际输出?
#include <stdio.h>
int fact(int ,int ,int);
int main(void)
{
int a=5;
int b=a;
int i=1;
printf("%d",fact(a,i,b));
}
int fact(int a,int i,int b)
{
if(i<b)
{
a=a*i;
i++;
fact(a,i,b);
}
return a;
}
实现的签名不允许返回结果。您可以将实现更改为以下内容。
int fact(int a)
{
int Result;
if (0 == a)
Result = 1;
else
Result = a * fact(a-1);
return Result;
}
您是否忘记从if
条件中fact
函数中return
?
void fact(int a,int i,int b)
{
if(i<b)
{
a=a*i;
i++;
fact(a,i,b);
return; //<-- Added code
}
printf("%dn",a);
}
考虑堆栈:
1*f(0)=1
|
|
4*f(3)
5*f(4)
f(5)
so,while getting poped from stack:
1*2*3*4*5=120.
#include <stdio.h>
int main()
{
int a=5;
int ans=f(a);
printf("%dn",ans);
return 0;
}
int f(int n)
{
if(n==0)
{
return 1;
}
else
{
return (n*f(n-1));
}
}
我找到了问题的正确答案,在这种情况下,我需要编写两个 return 语句来将值抛给函数。
#include <stdio.h>
int fact(int ,int ,int);
int main(void)
{
int a=5;
int b=a;
int i=1;
printf("%d",fact(a,i,b));
}
int fact(int a,int i,int b)
{
if(i<b)
{
a=a*i;
i++;
fact(a,i,b);
return;
}
return a;
}