2016-03-23 6 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は現在の機能を終了します。

1

returnは、呼び出し元関数へのプログラムの制御を返します。関数内でreturnが呼び出された後は何も実行されません。 printfを呼び出す場合は、returnの前に入力してください。

関連する問題