这两个地点有什么区别?

时间:2012-09-23 12:12:06

标签: c function recursion

我有一个递归程序。当在函数中使用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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

当使用printf块之外的IF时,即使y为0也会执行,printf块内的IF不是这种情况

答案 2 :(得分:0)

fact(int)由以下序列调用,

事实上(3) - &GT;事实(2)---&GT;事实(1)---&GT;事实(0)

最后一次通话是事实(0)。根据fact(int)的实现,当传入0时,如果在场外使用printf(),则打印0。如果在里面使用printf(),则不打印0。

事实上,当printf()在场外使用时,会传递传递到fact(int)的所有值。

答案 3 :(得分:0)

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

  1. 你的函数没有明确的return语句 对于理解递归代码尤为重要。
  2. system()需要stdlib,但不包括stdlib.h。
  3. system(“PAUSE”)不可移植且不必要。实际上你的代码 由于这个原因,我的系统无法运行。看到: http://www.gidnetwork.com/b-61.html
  4. 你的问题看起来像家庭作业,所以这是家庭作业的错,而不是你的:因为n!增长如此之快,使用'int'作为返回类型的阶乘函数只能计算n!对于1&lt; = n&lt; = 12,这是无用的。
  5. 尝试此练习:使用单个return和条件赋值编写单行因子函数。