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)。
您的解决方案有两个主要问题:
- 结果不会累积 - 您只需调用 vectorSum 函数,而不考虑之前调用的结果。
- 问题的规模在每次递归调用时都没有减少。
有几种方法可以实现这个递归,我推荐以下方法:
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
我应该如何编写尾递归函数来计算向量的总和? 该函数有 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)。
您的解决方案有两个主要问题:
- 结果不会累积 - 您只需调用 vectorSum 函数,而不考虑之前调用的结果。
- 问题的规模在每次递归调用时都没有减少。
有几种方法可以实现这个递归,我推荐以下方法:
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