Question: "Write a function with header [S] = mySum(A) where A is a one-dimensional array, and S is the sum of all the elements of A. You can use recursion or iteration to solve the problem, but do not use MATLAB’s function sum." Answer (there is error)
function [S] = mySum(A)
% this program is the sum of all the elements of A
%A is a one dimention array
%get A
[n]=size(A);
if n==1
% base case.
S= A(1);
elseif n==2
%base case
S=A(1) + A(2);
else
%recusrive step
S = mySum(A(n-1)) + mySum(A(n-2));
end
end
Where is the error?

댓글 수: 2

The size function, with one output, returns a vector with ndims(A) elements. When you use if (or elseif) with a nonempty vector in the condition, the body of the if or elseif statement is only executed if ALL the elements of the vector are nonzero.
I c

댓글을 달려면 로그인하십시오.

 채택된 답변

Star Strider
Star Strider 2016년 9월 3일

2 개 추천

You are making this much more difficult than it needs to be. Think about how you would manually sum a vector. Then write that program in MATLAB.
So if the vector is:
v = [5 7 1 2 9];
in the first iteration, the sum ‘S’ is equal to ‘v(1)’. In the second iteration the sum ‘S’ is equal to ‘S+v(2)’, the third iteration ‘S+v(3)’, and so to the end of the vector.
I’ll let you take it from there.

댓글 수: 5

function [S] = mySum(A)
% this program is the sum of all the elements of A %A is a one dimention array %get A [n]=size(A); if n==1 % base case. S= A(1);
else %recusrive step S = A(1) + mySum(n); % it say right here out of memory, I uderstand the manual sum end end
I was going for something like this, as I initially described:
function S = mySum(A)
Alen = length(A); % ‘A’ Is A Vector, So ‘length’ or ‘numel’ Both Work
S = 0; % Initialise Sum ‘S’
for k1 = 1:Alen
S = S + A(k1); % Loop Through The Elements Of ‘A’
end
Change it as necessary to meet your requirements.
Oh, I see, thank you so much, I should the n= length(A) instead of size (A), the code work already. thank you, I really appreciate this
My pleasure.
Or you could use numel():
Alen = numel(A);
The advantage of that is that now A is not restricted to 1-D vectors. With length, it will not work with 2-D or higher dimensional arrays. But numel() with let this function work with any dimension of array A. It usually doesn't hurt to be more flexible and robust, though if you need to warn the user if they don't pass in a vector, you can use the ndim() and warndlg() functions.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

jJnte
jJnte 2017년 4월 11일
편집: jJnte 2017년 4월 11일

1 개 추천

I will give my input for this problem. Me like others who searched on this problem might wanna get an easy overlook of the answer.
My assignment was to write a function which sums all the elements in a vector, with recursion. I want to add that I'm a beginner so don't put too much faith in my coding.
This is how I solved it:
function S = mySum(A)
n = 1:length(A);
if n == 1 % Base case
S = A(1);
else
Last_term = A(end);
Term_before_last_term = mySum(A(1:end-1)); % Recursive step
S = Last_term + Term_before_last_term;
end
end
If someone with greater knowledge than me would be inclined to criticize this, I gladly hear it.

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

질문:

2016년 9월 3일

편집:

2017년 4월 11일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by