Если ответ sinanspd не отвечает на ваш вопрос, вот пример кода.
Допустим, ваша функция collatz имеет следующую подпись:
def collatz(input: Type1): Type2 = ???
Способ подсчетаСколько раз он вызывается, чтобы либо изменить сам collatz, либо использовать какую-нибудь функцию-обертку.
def counter(oldCount: Int, fun: Type1 => Type2, input: Type1): (Int, Type2) = {
val output = fun(input)
(oldCount + 1, output)
}
При первом вызове counter вызывайте его со значением oldCount, равным 0. Каждый раз, когда вы вызываете counterПройдите в старую версию графа. Первым значением вашего выходного кортежа будет новый счет.