0

我有一个递归程序。在printf函数中使用时输出 123 ,在外部使用时输出 0123 。

#include <stdio.h>

fact(int);
int main()
{
    int x=3;
    fact(x);
    printf("\n");
    system("PAUSE");
}

int fact(int y)
{
    if (y > 0)
    {
         fact(y-1);
         printf("%d",y);  
    }
    //printf("%d",y);   
}   

我没有同时使用两者printf。此printf语句的位置会产生什么不同?

4

4 回答 4

1

由于您的if条件查找大于零的值,因此它按预期工作。

于 2012-09-23T12:16:35.750 回答
1

当使用printf该块的外部时,IF即使 y 为 0,它也会被执行,而块printf内部则不是这种情况IF

于 2012-09-23T12:17:00.060 回答
0

我想说您自己没有看到答案的一个原因是您的代码草率。以下是一些抱怨:

  1. 您的函数没有明确的返回语句,这对于理解递归代码尤其重要。
  2. system() 需要 stdlib,但不包括 stdlib.h。
  3. system("PAUSE") 是不可移植且不必要的。实际上,因此您的代码不会在我的系统上运行。见: http ://www.gidnetwork.com/b-61.html
  4. 你的问题看起来像作业,所以这个是作业的错,而不是你的错:因为 n!增长如此之快,使用'int'作为返回类型的阶乘函数只能计算n!对于 1<=n<=12,这是没用的。

return试试这个练习:使用单个和条件赋值编写一个单行阶乘函数。

于 2012-09-23T13:29:36.990 回答
0

fact(int) 按以下顺序调用,

事实(3)-->事实(2)--->事实(1)--->事实(0)

最后一个调用是 fact(0)。根据 fact(int) 的实现,传入 0 时,如果在场外使用 printf(),则打印 0。如果内部使用了 printf(),则不打印 0。

事实上,所有传入 fact(int) 的值都会在外部使用 printf() 时打印出来。

于 2012-09-23T13:02:49.743 回答