通常,我必须使用“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));
}
答案 0 :(得分:1)
这是未定义的行为。就阶乘而言,返回值没有任何意义。实际上1
的阶乘是1
而不是3
因此它给出的结果不正确。没有任何意义。即使它给你正确的结果 - 在这种情况下1
不要认为这是一个正确的代码,无论如何都会工作。它不会。
当您遵守所有启用的标志时,编译器也提到了这一点。 gcc -Wall -Werror progname.c
。
解释未定义的行为: -
标准明确选择不定义编译器的方式 如果遇到未定义的行为,应该表现出来。因此,编译器可以自由地执行它认为合适的任何操作,并可能产生有用的结果,意外的结果,甚至崩溃。你不应该依赖它。