题目

编写通用求和函数 <code>flexible_sum(varargin)</code>,能够接受任意数量的实参输入(不论是传入单独的标量、还是传入向量),函数内部遍历 <code>varargin</code> 元胞数组将所有数值汇总求和。

输入格式:无需外部输入。

输出格式:展示传入 2 个参数、4 个不同形态参数时的累加结果。

数据范围与约定:可变参数列表。

思路与算法

1. varargin 特性
varargin 必须作为形参列表的最后一项,系统会自动把所有多余的传入参数按顺序包装成一个 cell(元胞数组)。

2. 元胞内容提取
遍历 varargin 时,必须使用大括号花括号 varargin{k} 取出实际存入的变量实体;若用小括号只会拿到包含一层的元胞容器。

3. 灵活适配接口
支持类似 flexible_sum(1, 2) 以及 flexible_sum([1, 2], 3, [4, 5]) 混合入参。

完整程序

% Octave / MATLAB 第65题:varargin 可变参数处理
1;

function total = flexible_sum(varargin)
    total = 0;
    % varargin 是一个 1 x n 的元胞数组
    for k = 1:length(varargin)
        item = varargin{k}; % 花括号提取真实变量内容
        total = total + sum(item(:)); % 向量化压平并累加
    end
end

% 主程序
res1 = flexible_sum(10, 20);
res2 = flexible_sum(5, [1, 2, 3], 10, [100; 200]);

fprintf("调用 flexible_sum(10, 20) = %d\n", res1);
fprintf("调用 flexible_sum(5, [1 2 3], 10, [100; 200]) = %d\n", res2);

运行示例

输出:

调用 flexible_sum(10, 20) = 30
调用 flexible_sum(5, [1 2 3], 10, [100; 200]) = 321