C 为什么fun(int i)中的printf语句没有执行?

C 为什么fun(int i)中的printf语句没有执行?,c,recursion,printf,C,Recursion,Printf,这是一个具有递归循环的代码。我得到的输出是199,但是没有执行标记为-A的printf语句。请告诉我为什么 #include <stdio.h> int fun(int); // function defined int main() { printf(" %d ", fun(200)); // function called return 0; } int fun(int i) // entire body of the function { stat

这是一个具有递归循环的代码。我得到的输出是199,但是没有执行标记为-A的printf语句。请告诉我为什么

#include <stdio.h>

int fun(int); // function defined

int main()
{
    printf(" %d ", fun(200)); // function called
    return 0;
}

int fun(int i) // entire body of the function
{
    static int d = 0;
    d++;

    if (i % 2)
        return (i++);
    else 
        return fun(fun(i - 1));

    printf("%d ", d);// ------A

} // function fun(int) ends here.
发件人:


如果函数收敛,两部分都返回。所以printf是不可访问的代码。

因为return结束当前函数。

return将程序的控制权返回给调用函数。因此,在函数内部调用return之后,不会执行任何操作。如果您希望调用printf,请将其放在返回之前。

您希望在什么条件下执行它?请格式化您的代码。它怎么可能执行?没有通往它的道路。这就是所谓的不可访问代码。如果i%2非零,则返回i++。否则,它将返回嵌套的递归调用结果。不管是哪种情况,它都会返回。。谢谢你。
if ( i%2 ) return (i++);
else return fun(fun( i - 1 ));