Matlab - 尾递归向量和

Matlab - Tail recursive vector sum

我应该如何编写尾递归函数来计算向量的总和? 该函数有 2 个输入参数:向量 v 和 sum。 尾递归意味着函数的最后一部分必须调用自身。

我对函数应该是什么样子有一个基本的shell,但我不确定如何编写递归部分。

function result = vectorSum(v,sum)
%takes a vector v and the returns the sum of all elements in the vector
if length(v) == 0
    result = 0;
elseif length(v) == 1
    result = v;
else
    result = vectorSum(v,sum)
end
end

函数 returns 空向量的结果为 0,如果向量的长度为 1,则它 returns 值 v(1)。

您的解决方案有两个主要问题:

  1. 结果不会累积 - 您只需调用 vectorSum 函数,而不考虑之前调用的结果。
  2. 问题的规模在每次递归调用时都没有减少。

有几种方法可以实现这个递归,我推荐以下方法:

function result = vectorSum(v)
%takes a vector v and the returns the sum of all elements in the vector
if length(v) == 0
    result = 0;
else
    result = v(end) + vectorSum(v(1:end-1));
end
end