我可以在不使用Matlab中的全局变量的情况下跟踪对递归Fibonacci函数的调用

时间:2018-05-03 10:44:43

标签: matlab global-variables fibonacci

如何在不使用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)

1 个答案:

答案 0 :(得分:3)

如果要避免递归函数中的全局变量,可以传入一个随每次连续递归调用更新的值。

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

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

将此与非全局版本进行比较,这可以帮助您了解修改Fibonacci函数需要执行的操作。