Если вы хотите избежать глобальной переменной в рекурсивной функции, вы можете передать значение, которое обновляется при каждом последующем рекурсивном вызове.
Я не хочу давать вам точное решение для вашего назначения, но рассмотрим пример рекурсивной реализации факториальной функции. Довольно просто адаптировать этот метод к вашей функции Фибоначчи.
function [res, call_count] = recursive_factorial(n, call_count)
% increment counter
call_count = call_count + 1;
if n <= 1
% check for base case
res = 1;
else
% call_count gets updated by recursive call
[res_prev, call_count] = recursive_factorial(n-1, call_count);
res = n * res_prev;
end
end
Пример использования 10 !. Обратите внимание, что мы инициализируем аргумент call_count
равным 0 для начального вызова.
>> [ten_factorial, call_count] = recursive_factorial(10, 0)
ten_factorial =
3628800
call_count =
10
Обновление
Если бы мы использовали счетчик вызовов глобальной переменной, тогда факториальная функция выглядела бы примерно так:
function res = recursive_factorial(n)
% increment global counter
global call_count
call_count = call_count + 1;
if n <= 1
res = 1;
else
res = n * recursive_factorial(n-1);
end
end
Сравните это с неглобальной версией, и это должно помочь вам понять, что вам нужно сделать, чтобы изменить свою функцию Фибоначчи.