#include <stdio.h>
/* 階乗を求める再帰関数 */
int fact(int n)
{
/* 関数が呼び出されたことを表示 */
printf("関数が開始されました。引数は %d です。\n", n
);
/* 終了条件 */
if (n == 1) {
printf("n = 1 なので 1 を返します。\n"); return 1;
}
/* 再帰呼び出し */
int result = n * fact(n - 1);
/* 戻り値を表示 */
printf("n = %d のとき、戻り値は %d です。\n", n
, result
);
return result;
}
int main(void)
{
/* 引数10で関数を呼び出す */
int answer = fact(10);
/* 結果を表示 */
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovKiDpmo7kuZfjgpLmsYLjgoHjgovlho3luLDplqLmlbAgKi8KaW50IGZhY3QoaW50IG4pCnsKICAgIC8qIOmWouaVsOOBjOWRvOOBs+WHuuOBleOCjOOBn+OBk+OBqOOCkuihqOekuiAqLwogICAgcHJpbnRmKCLplqLmlbDjgYzplovlp4vjgZXjgozjgb7jgZfjgZ/jgILlvJXmlbDjga8gJWQg44Gn44GZ44CCXG4iLCBuKTsKCiAgICAvKiDntYLkuobmnaHku7YgKi8KICAgIGlmIChuID09IDEpIHsKICAgICAgICBwcmludGYoIm4gPSAxIOOBquOBruOBpyAxIOOCkui/lOOBl+OBvuOBmeOAglxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLyog5YaN5biw5ZG844Gz5Ye644GXICovCiAgICBpbnQgcmVzdWx0ID0gbiAqIGZhY3QobiAtIDEpOwoKICAgIC8qIOaIu+OCiuWApOOCkuihqOekuiAqLwogICAgcHJpbnRmKCJuID0gJWQg44Gu44Go44GN44CB5oi744KK5YCk44GvICVkIOOBp+OBmeOAglxuIiwgbiwgcmVzdWx0KTsKCiAgICByZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbih2b2lkKQp7CiAgICAvKiDlvJXmlbAxMOOBp+mWouaVsOOCkuWRvOOBs+WHuuOBmSAqLwogICAgaW50IGFuc3dlciA9IGZhY3QoMTApOwoKICAgIC8qIOe1kOaenOOCkuihqOekuiAqLwogICAgcHJpbnRmKCIxMCEgPSAlZFxuIiwgYW5zd2VyKTsKCiAgICByZXR1cm4gMDsKfQ==