函数printf("hello")
中的fact()
语句是否会被执行?如果是,那么在main
中调用功能事实时,为什么不打印?如果没有,则此return
语句将值返回给函数,并且永远不会接近语句printf("Hello")
。
#include <stdio.h>
int fact(int n)
{
if (n == 1)
return 1;
else
return (n * fact(n - 1));
printf("Hello");
}
main()
{
printf("%d", fact(6));
}
答案 0 :(得分:0)
int fact(int n)
{
if(n==1)
return 1; //statement 1
else
return (n*fact(n-1)); //statement 2
printf("Hello");
}
函数以return语句结束。 return语句指定函数在返回以下信息时结束。
每当使用任何n值调用函数时,该函数总是在语句1或语句2中结束执行,因此永远不会到达printf语句
答案 1 :(得分:0)
Law of Excluded Middle对于if
语句的正式推理非常有用。代码中的两个选项如下:
n
等于1
和n
不等于1
。没有第三个&#34;中间&#34;以这种逻辑说明。
现在让我们回到您的代码,看看会发生什么,具体取决于n
的值。如果是1
,则代码会返回1
。当n
不时,您的代码会返回一些计算结果。
为了达到printf("Hello")
,n
需要等于1,同时不等于1(即n==1 && n!=1
必须为真)。排除中间的定律允许您在数学上证明此表达式false
适用于n
的所有值,这意味着printf
行在任何情况下都无法访问。优化C编译器将发出警告,并删除这个&#34;死代码&#34;来自他们生成的可执行文件。