В зависимости от структуры вашего алгоритма, может быть третий вариант, который заключается в использовании вложенных функций.Вложенная функция имеет свое собственное рабочее пространство (область видимости переменных), но также имеет доступ к переменным в рабочих пространствах функций, в которые она вложена - без того, чтобы они были должным образом глобальными.Я обнаружил, что это подход, который обычно делает код достаточно чистым.
Вот простой арифметический пример:
function z = times1(x,y)
if y == 0
z = 0;
else
z = plusy(times1(x, y-1));
end
function z = plusy(x)
z = x+y;
end
end
Вы можете видеть, что переменная y
используется внутривложенная функция plusy
, хотя это не входной аргумент, а в рабочей области родительской функции;тем не менее, это не глобальный.(Обратите внимание, что в последних версиях MATLAB y
будет выделен в редакторе голубым цветом, чтобы подчеркнуть эту общую область).
Какой подход будет самым быстрым и использует наименьшее количество памяти, это, вероятноочень сильно зависит от деталей вашего конкретного алгоритма - насколько много копий данных, от глубины рекурсии и т. д. Я думаю, вам нужно будет поэкспериментировать и потратить время, либо с tic
и toc
,или, что еще лучше, с помощью функции Стива Эддинса timeit из Центрального обмена файлами MATLAB.