You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中不使用全局变量追踪递归斐波那契函数的调用次数

嘿,我懂你现在的处境——课程作业要求用递归实现斐波那契函数,还得追踪函数的调用次数,但又明确禁止用全局变量,可你目前只能靠全局变量搞定次数统计对吧?别愁,我给你一个完美的替代方案!

首先,咱们先说说全局变量的问题:它虽然能实现次数统计,但不符合作业要求,而且如果多次调用这个函数,全局变量的状态还会残留,很容易出bug。那怎么不用全局变量呢?核心思路是让递归函数同时返回两个值:一个是斐波那契的计算结果,另一个是从当前调用开始的总调用次数。

话不多说,直接上修改后的代码:

format long;
n = input('请输入n的值:');
[fib_result, call_count] = fib(n);
fprintf('%d %d\n', fib_result, call_count);

function [res, count] = fib(n)
    if n == 1 || n == 2
        res = 1;
        count = 1; % 本次调用算1次
    else
        % 递归获取n-1和n-2的结果及各自的调用次数
        [res1, count1] = fib(n-1);
        [res2, count2] = fib(n-2);
        res = res1 + res2;
        count = 1 + count1 + count2; % 加上当前这次调用的次数
    end
end

咱们来拆解一下这个实现的逻辑:

  • 函数fib现在有两个输出参数:res是当前n对应的斐波那契数,count是从这次调用开始,包括自身在内的所有递归调用总次数。
  • 当n是1或2时,直接返回结果1,同时因为这是一次独立调用,所以次数count设为1。
  • 当n大于2时,我们先递归调用fib(n-1)和fib(n-2),拿到它们各自的结果和调用次数。然后当前的结果就是两者之和,而总调用次数则是当前这次调用(1次)加上两个子调用的次数总和。
  • 在主程序里,我们直接接收这两个返回值,然后打印出来就行,全程不需要任何全局变量。

这个方法完全符合你的作业要求,而且比全局变量的实现更健壮——不管你调用多少次fib函数,每次的调用次数统计都是独立的,不会互相干扰。

内容的提问来源于stack exchange,提问作者Anshul Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:38:29