带有C递归的因子:为什么我的代码在运行?

时间:2018-02-23 17:11:13

标签: c recursion

通常,我必须使用“else return 1”。但是,它没有那条线。谢谢你的回答。

#include<stdio.h>
    int f(int x)
    {
          if(x!=1)
          return x*f(x-1);

          //else return 1

    }
    int main()
    {
      int x;scanf("%d",&x);
        printf("%d",f(x));
    }

1 个答案:

答案 0 :(得分:1)

这是未定义的行为。就阶乘而言,返回值没有任何意义。实际上1的阶乘是1而不是3因此它给出的结果不正确。没有任何意义。即使它给你正确的结果 - 在这种情况下1不要认为这是一个正确的代码,无论如何都会工作。它不会。

当您遵守所有启用的标志时,编译器也提到了这一点。 gcc -Wall -Werror progname.c

解释未定义的行为: -

标准明确选择不定义编译器的方式 如果遇到未定义的行为,应该表现出来。因此,编译器可以自由地执行它认为合适的任何操作,并可能产生有用的结果,意外的结果,甚至崩溃。你不应该依赖它。