【发布时间】:2016-09-19 18:10:04
【问题描述】:
我应该如何编写一个尾递归函数来计算向量的和? 该函数有 2 个输入参数:一个向量 v 和 sum。 尾递归意味着函数的最后一部分必须调用自身。
我有一个函数应该是什么样子的基本外壳,但我不确定如何编写递归部分。
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
函数对空向量返回结果为 0,如果向量的长度为 1,则返回值 v(1)。
【问题讨论】:
-
如果
length(v)>1那么你的代码什么也不做,并且再次将相同的输入传递给它自己。这不可能是正确的! -
你在哪里执行
sum?您在哪里减小递归中的大小v以使执行最终终止?除了那些 cmets,我要说的是,据我所知,Matlab 不做尾递归优化,深度递归代码的性能往往比迭代更差。
标签: matlab recursion vector sum tail