Как мне отследить вызовы, сделанные к рекурсивной функции Фибоначчи, без использования глобальной переменной в Matlab - PullRequest
0 голосов
/ 03 мая 2018

Как отследить вызовы, сделанные в рекурсивной функции Фибоначчи, без использования глобальной переменной в matlab. Я попробовал это с использованием глобальной переменной, но не смог обойтись без него Это было задано в нашем задании курса, в котором мы были обязаны использовать рекурсивный алгоритм и не использовать глобальные переменные.

format long;
global ind;
ind=0;

n = input('');
1;function [res] = fib( n )
  global ind;
  if(n==1 || n==2)
     ind = ind+1;
    res=1;
  else
     ind = ind+1;
     res = fib(n-1)+fib(n-2);

  end

end



fprintf('%d %d',fib(n),ind)

1 Ответ

0 голосов
/ 03 мая 2018

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

Я не хочу давать вам точное решение для вашего назначения, но рассмотрим пример рекурсивной реализации факториальной функции. Довольно просто адаптировать этот метод к вашей функции Фибоначчи.

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

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

...