我如何在不使用 Matlab 中的全局变量的情况下跟踪对递归斐波那契函数的调用

Ho do I trace calls made to recursive Fibonacci function without using global variable in Matlab

我如何在不使用 matlab 中的全局变量的情况下跟踪对递归 Fibonacci 函数的调用。 我尝试使用全局变量但无法不使用它。这是在我们的课程作业中被问到的,我们必须使用递归算法并且不使用全局变量。

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)

如果您想避免在递归函数中使用全局变量,您可以传入一个值,该值会随着每次连续的递归调用而更新。

我不想为您的作业提供确切的解决方案,但请考虑阶乘函数的递归实现示例。将此方法应用于您的斐波那契函数非常简单。

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

将此与非全球版本进行比较,这应该有助于您了解修改斐波那契函数需要执行的操作。