функция должна принимать ровно те аргументы которые ей нужны, и все ее вызывающие должны их передавать и соответственно знать о них
в этом и проблема. при таком построении кода сигнатура функции должна содержать все данные, которые нужны дереву вызовов из этой функции, рекурсивно. нарушение инкапсуляции.