您好我在阶乘程序中进行了一些检查,我很困惑27,40,50是如何输出的,而ans是10。
#include<stdio.h>
int fact(int n)
{
if(n==1)
{
printf("hello1 %d\n",n);
return 1;
}
else
{
printf("hello2 %d\n",n);
n*=fact(n-1);
printf("hello3 %d\n",n);
}
// printf("hello4 %d\n",n);
}
void main()
{
int n,s;
printf("Enter no. ");
scanf("%d",&n);
s=fact(n);
printf("\n%d",s);
printf("%c",10);
}
Enter no. 5
hello2 5
hello2 4
hello2 3
hello2 2
hello1 1
hello3 2
hello3 27
hello3 40
hello3 50
10
答案 0 :(得分:1)
我觉得奇怪的是,return
中的else
区块中没有fact()
,它应该是:
else
{
printf("hello2 %d\n",n);
n*=fact(n-1);
printf("hello3 %d\n",n);
return n;
}
答案 1 :(得分:0)
在return
块中添加else
语句。
else
{
printf("hello2 %d\n",n);
n *= fact(n-1);
printf("hello3 %d\n",n);
return n;
}
答案 2 :(得分:-1)
我觉得有趣的是在反向遍历期间如何选择27 ...
#include<stdio.h>
int fact(int n)
{
if(n==1)
{
printf("hello1 %d\n",n);
return 1;
}
else
{
printf("hello2 %d\n",n);
// return n*=fact(n-1);
n*=fact(n-1);
// printf("hello3 %d\n",n);
// return n;
}
// printf("hello4 %d\n",n);
}
void main()
{
int n,s;
printf("Enter no. ");
scanf("%d",&n);
s=fact(n);
printf("\n%d",s);
printf("%c",10);
}
如果我评论// printf(hello3),它会给我结果。