我如何在不使用 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
将此与非全球版本进行比较,这应该有助于您了解修改斐波那契函数需要执行的操作。
我如何在不使用 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
将此与非全球版本进行比较,这应该有助于您了解修改斐波那契函数需要执行的操作。