Как посчитать, сколько раз рекурсивная функция вызывает себя без использования переменных - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть функция с именем collatz, и мне нужно узнать, сколько раз она сама себя вызывает, но мне не разрешено использовать какие-либо vars.

Функция отлично работает с vars, но мне нужно использовать vals.

1 Ответ

1 голос
/ 08 ноября 2019

Если ответ 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Пройдите в старую версию графа. Первым значением вашего выходного кортежа будет новый счет.

...