【问题标题】:Matlab - Tail recursive vector sum [duplicate]Matlab - 尾递归向量和[重复]
【发布时间】: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


【解决方案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

【讨论】:

  • @beaker 你是对的,我删除了 1 条件部分。
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 2014-02-20
  • 2011-11-14
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多