Я что-то делал с иерархической структурой данных, и я разработал группу методов для ее обхода / анализа с косвенной рекурсией, как описано ниже.
Существуют методы a
, b
, c
и d
, все с типом возврата Unit
. Метод a
вызывается первым. В зависимости от данных он что-то сделает, а затем либо остановится, либо вызовет один из b/c/d
. То же самое с каждым из b, c и d - каждый метод может либо остановить, либо вызвать любой из 3 других методов. Итак, какие методы вызываются, и порядок их выполнения будет неизвестен до времени выполнения, и рекурсия не является непосредственно очевидной, поскольку ни один метод не вызывает непосредственно сам себя (не волнуйтесь, каждый метод будет прокомментирован для описания циклической / рекурсивной природы вызовы).
Каждый дополнительный вызов a
, b
, c
или d
- это последнее, что нужно выполнить в каждом методе, но это не буквально последний оператор каждого метода; будет оператор if
или case
, который определяет, какой из них будет вызываться.
Может ли компилятор Scala анализировать эту многоуровневую цепочку вызовов и реализовывать для нее хвостовую рекурсию, учитывая, что ни один метод не вызывает сам себя?