problem in recursive function

조회 수: 2 (최근 30일)
huda nawaf
huda nawaf 2012년 9월 1일
댓글: farah fadel 2020년 3월 26일
hi,
I have recurrent function , this function has two outputs and each output will be input next in time. I built divide function, this function divide the input into two parts , and each one of the two parts will be input to same function and get two outputs and so on
[a,b]=divede(c)
let divide whatever function
I need help to do that.
thanks
  댓글 수: 7
huda nawaf
huda nawaf 2012년 9월 1일
thanks,
let this function
function [p o]=d(x)
%%x any vector of values
k=1;k1=1;
for i=1:length(x)
if x(i)>median(x)
s(k)=x(i);
k=k+1;
else
s1(k1)=x(i);
k1=k1+1;
end
end
p=s; o=s1;
end
what i need is,each of output will be the input to this function i.e [o p]=d(o) [o p]=d(p) each output will be input to this function and so on say do that for 5 times, in fact with my case i know the condition stop.
huda nawaf
huda nawaf 2012년 9월 2일
편집: huda nawaf 2012년 9월 2일
yes, i mean recursive for image analyst I mean if I have
while ()
[a b]=d(p)
[a1 a2]=d(a)
[b1 b2]=d(b)
[a11 a22]=d(a1)
[b11 b22]=d(b1)
and so on
end
i have stop condition.

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

채택된 답변

Image Analyst
Image Analyst 2012년 9월 2일
Here is some recursive code:
% Demo to rotate an ellipse over an image.
% By ImageAnalyst
function [aboveMedian belowMedian] = test2(v)
% Initialize
aboveMedian = v;
belowMedian = v;
% Stopping condition.
if length(v) <= 1
return;
end
medianValue = median(v);
indexesAboveMedianVaue = v > medianValue;
aboveMedian = v(indexesAboveMedianVaue);
belowMedian = v(~indexesAboveMedianVaue);
% Stopping conditions.
if length(aboveMedian) <= 1 && ...
length(belowMedian) <= 1
return;
end
if length(belowMedian) == length(v)
return;
end
fprintf('For v = ');
fprintf('%f, ', v);
fprintf('\n Median = %f', medianValue);
fprintf('\n Values above median = ');
fprintf('%.1f, ', aboveMedian);
fprintf('\n Values at or below median = ');
fprintf('%.1f, ', belowMedian);
fprintf('\n');
% Now recurse in with the two outputs
test2(aboveMedian);
test2(belowMedian);
It sort of does what you were trying to do with the median. Try it with this code:
a=[2 3 4 56 7 85 3 5 7 7];
[am bm] = test2(a)
But it will quit early because I'm not really sure when you want to stop. What are your stopping conditions when you won't recurse in anymore? I don't have the right stopping conditions in there. Anyway, it's a start and I'll leave it up to you to finish. Good luck.
  댓글 수: 16
Walter Roberson
Walter Roberson 2020년 3월 26일
How many outputs does the function have? You said it has two outputs, and now you are complaining that it only saves the first two outputs.
You would use the above code everywhere that you call your function, if you want to save all the outputs of the recursion.
farah fadel
farah fadel 2020년 3월 26일
thank you, it worked

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

추가 답변 (1개)

Azzi Abdelmalek
Azzi Abdelmalek 2012년 9월 1일
편집: Azzi Abdelmalek 2012년 9월 1일
n=5;c={rand(1,100)};
for k=1:5
c1=[];
for i1=1:length(c)
[a,b]=divede(c{i1})
c1=[c1 ;{a};{ b}];
end
c=c1
end
% your results are
c{1},c{2} ,c{3} % ...
  댓글 수: 13
Azzi Abdelmalek
Azzi Abdelmalek 2012년 9월 2일
편집: Azzi Abdelmalek 2012년 9월 2일
that 's what the code i've posted i guess is doing. did you try it? if yes what is the problem?
Azzi Abdelmalek
Azzi Abdelmalek 2012년 9월 3일
편집: Azzi Abdelmalek 2012년 9월 3일
%maby we are not using the same function dived; s and s1 should be initialized
function [p o]=dived(x)
s=[];s1=[]
k=1;k1=1;
for i=1:length(x)
if x(i)>median(x)
s(k)=x(i);
k=k+1;
else
s1(k1)=x(i);
k1=k1+1;
end
end
p=s; o=s1;
the code using dived
n=5;c={rand(1,100)};
for k=1:5
c1=[];
for i1=1:length(c)
[a,b]=dived(c{i1})
c1=[c1 ;{a};{ b}];
end
c=c1
end
% your results are
c{1},c{2} ,c{3} % ...

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

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by