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

修改Octave/Matlab的rtfib函数以支持多值输入

修改Octave/Matlab的rtfib函数支持多值输入

要让你的rtfib函数支持像rtfib(1:8)这样的向量输入,我们只需要在原函数基础上添加对向量输入的处理逻辑就行,这里有两种实用的实现方式:

方法一:用arrayfun快速复用原有逻辑

这种方法代码最简洁,直接利用Octave/Matlab的arrayfun函数,把原有的标量处理逻辑自动应用到输入向量的每个元素上:

function [f] = rtfib(n)
    % 先判断输入是否为向量,如果是就逐个处理每个元素
    if isvector(n)
        f = arrayfun(@rtfib, n);
        return;
    end
    
    % 原有负数处理逻辑保持不变
    if n < 0
        multi = -1;
        n = abs(n);
    else
        multi = 1;
    end
    
    % 合并n=1和n=2的判断,让代码更简洁
    if n == 0
        f = 0;
    elseif n == 1 || n == 2
        f = 1;
    else
        fOld = 1;
        fOlder = 1;
        for i = 3:n
            f = fOld + fOlder;
            fOlder = fOld;
            fOld = f;
        end
    end
    
    f = f * multi;
end

测试效果:

  • 输入rtfib(8) → 返回21(和原函数功能一致)
  • 输入rtfib(1:8) → 返回[1, 1, 2, 3, 5, 8, 13, 21]
  • 输入rtfib(-3) → 返回-2
  • 输入rtfib(-1:-1:-8) → 返回[-1, -1, -2, -3, -5, -8, -13, -21]

方法二:直接遍历向量元素(效率更高)

如果你的输入向量规模很大,arrayfun会有一定的函数调用开销,这时可以直接遍历每个元素计算,运行效率会更优:

function [f] = rtfib(n)
    % 把输入统一转为列向量,方便批量处理
    original_shape = size(n);
    n = n(:);
    len = length(n);
    f = zeros(len, 1);
    
    % 遍历每个输入元素
    for k = 1:len
        num = n(k);
        multi = 1;
        
        % 负数处理
        if num < 0
            multi = -1;
            num = abs(num);
        end
        
        % 计算对应斐波那契数
        if num == 0
            val = 0;
        elseif num == 1 || num == 2
            val = 1;
        else
            fOld = 1;
            fOlder = 1;
            for i = 3:num
                val = fOld + fOlder;
                fOlder = fOld;
                fOld = val;
            end
        end
        
        f(k) = val * multi;
    end
    
    % 保持输出和原输入的维度一致(行向量/列向量)
    f = reshape(f, original_shape);
end

这个版本会先把输入转为列向量统一处理,最后再还原成原输入的形状,确保输出的维度和输入完全匹配,同时避免了函数调用的额外开销。

选择建议

  • 如果输入规模不大,优先选方法一,代码更简洁,后续维护也更方便;
  • 如果需要处理大规模的输入向量,方法二的运行效率会更高。

内容的提问来源于stack exchange,提问作者Rick T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:12:50