Значение возвращается тому, кто его запросил.
Например, если запросить f.fact(1), то метод Factorial::fact сразу вернет 1.
Для запроса f.fact(2) цепочка вызовов будет такой:
сначала запрос Factorial::fact(2), который вернет Factorial::fact(1) * 2.
В ответе есть снова запрос Factorial::fact(1), который возвращает 1. Таким образом, получаем 2*1, т.е. 2.
По этой же схеме проходят и остальные примеры:
f.fact(10) -> f.fact(9) * 10 -> f.fact(8) * 9 * 10 -> ... -> f.fact(1) * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10.