我正在尝试实现递归函数以在向量v中添加奇数。 到目前为止,这是我的尝试
function result = sumOdd(v)
%sum of odd numbers in a vector v
%sumOdd(v)
n = 1;
odds = [];
if length(v) > 0
if mod(v(n),2) == 1
odds(n) = v(n);
v(n) = [];
n = n + 1;
sumOdd(v)
elseif mod(v(n),2) == 0
v(n) = [];
n = n + 1;
sumOdd(v)
end
else
disp(sum(odds))
end
end
这不起作用并返回零值。我是编程和递归的新手,想知道我做错了什么。
谢谢。
答案 0 :(得分:2)
有一种更好的方法可以在MATLAB中解决这个问题:
function result=summOdd(v)
odd_numbers=v(mod(v,2)); % Use logical indexing to get all odd numbers
result=sum(odd_numbers); % Summ all numbers.
end
提供递归解决方案:
实现递归函数时,应始终遵循一种模式。首先从简单的情况开始,递归停止。在这种情况下,空列表的总和为0:
function result = sumOdd(v)
%sum of odd numbers in a vector v
%sumOdd(v)
if length(v) == 0
result=0;
else
%TBD
end
end
我总是以这种方式开始,以避免在尝试我的代码时无限递归。在放置%TBD的地方,您必须进行实际的递归。在这种情况下,您的想法是处理第一个元素并将所有剩余的元素放入递归中。首先写一个变量s
,如果第一个元素是偶数,则包含0,当它是奇数时,第一个元素本身。这样您就可以使用result=s+sumOdd(v)
function result = sumOdd(v)
%sum of odd numbers in a vector v
%sumOdd(v)
if length(v) == 0
result=0;
else
if mod(v(1),2) == 1
s=v(1);
else
s=0;
end
v(1) = [];
result=s+sumOdd(v);
end
end
现在您的代码已完成,请阅读编辑器提供给您的黄色警告,它会告诉您将length(v) == 0
替换为isempty(v)
。
答案 1 :(得分:0)
除了保持'n'之外,你总是可以删除v的第一个元素。另外,你需要传递'odds'作为参数,因为你每次调用函数时都将它初始化为一个空数组(因此零输出)。
以下示例似乎可以完成这项工作:
C:\>chcp 65001
C:\>java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar