这两个地点有什么区别?
我有一个递归程序。 当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
。
我会说你自己没有看到答案的一个原因是因为你的代码很草率。 以下是一些投诉:
- 您的函数没有明确的return语句,这对于理解递归代码尤其重要。
- system()需要stdlib,但不包括stdlib.h。
- system(“PAUSE”)不可移植且不必要。 实际上你的代码不会因为这个而在我的系统上运行。 请参阅: http : //www.gidnetwork.com/b-61.html
- 你的问题看起来像家庭作业,所以这是家庭作业的错,而不是你的:因为n! 增长如此之快,使用’int’作为返回类型的阶乘函数只能计算n! 对于1 <= n <= 12,这是没用的。
尝试此练习:使用单个return
和条件赋值编写单行因子函数。