这两个地点有什么区别?

我有一个递归程序。 当printf用于该function时,它输出123,当在室外使用时,它输出0123。

 #include  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语句的位置有什么不同?

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

事实上(3) – >事实(2)—>事实(1)—>事实(0)

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

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

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

当使用IF块外部的printf ,即使y为0也会执行,这与IF块内的printf

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

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

尝试此练习:使用单个return和条件赋值编写单行因子函数。