如何在不使用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)
答案 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函数需要执行的操作。