sum by recursion without using sum of Matlab

2 vues (au cours des 30 derniers jours)
Tho Gonzalez
Tho Gonzalez le 3 Sep 2016
Modifié(e) : jJnte le 11 Avr 2017
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 commentaires
Steven Lord
Steven Lord le 3 Sep 2016
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.
Tho Gonzalez
Tho Gonzalez le 4 Sep 2016
I c

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 3 Sep 2016
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 commentaires
Star Strider
Star Strider le 4 Sep 2016
My pleasure.
Image Analyst
Image Analyst le 4 Sep 2016
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.

Connectez-vous pour commenter.

Plus de réponses (1)

jJnte
jJnte le 11 Avr 2017
Modifié(e) : jJnte le 11 Avr 2017
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.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by