#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);

    /* 結果を表示 */
    printf("10! = %d\n", answer);

    return 0;
}