具有递归的阶乘程序

时间:2014-11-09 13:21:38

标签: c

您好我在阶乘程序中进行了一些检查,我很困惑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

3 个答案:

答案 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),它会给我结果。