2016-03-23 87 views
-1

這是一個具有遞歸循環的代碼。我得到的輸出爲199,但標記爲--A的printf語句未執行。請告訴我爲什麼??爲什麼fun(int i)中的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. 
+4

您希望在哪些條件下執行? – juanchopanza

+0

請格式化您的代碼。 –

+1

它怎麼可能被執行?沒有路徑。這就是所謂的「不可達代碼」。如果'i%2'不爲零,則返回'i ++'。否則,它將返回嵌套的遞歸調用結果。無論哪種情況都會返回。 –

回答

2

來源:

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

兩個部分正在返回如果函數收斂。所以printf是無法訪問的代碼。

+1

是的..謝謝你。 – Premanand

1

return將程序的控制權返回給調用函數。因此在執行一個函數內部調用return之後沒有任何內容。如果您想要調用printf,請將其放在return之前。

相關問題